package com.boot.unity.api.modules.listener;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.boot.unity.api.modules.train.constants.IdentityTypeEnum;
import com.boot.unity.api.modules.train.dao.DeptDao;
import com.boot.unity.api.modules.train.dao.StuDao;
import com.boot.unity.api.modules.train.dao.StudentDao;
import com.boot.unity.api.modules.train.dto.StuSyncDTO;
import com.boot.unity.api.modules.train.dto.StuSyncDTOwhZh;
import com.boot.unity.api.modules.train.entity.Dept;
import com.boot.unity.api.modules.train.entity.Stu;
import com.boot.unity.api.modules.train.entity.Student;
import com.boot.unity.api.utils.DateUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import javax.lang.model.type.DeclaredType;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Base64;
import java.util.List;

/**
 * @author X
 * @create 2020-10-29 14:52
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class StudentSyncService {
    private final StudentDao studentDao;
    private final StuDao stuDao;
    private final RestTemplate restTemplate;
    private final ObjectMapper objectMapper;
    private final DeptDao deptDao;


    private static final String appSecret = "123456";

    public void studentSync(String cardNo) {
        System.out.println("程序走到这里了--------------------------------"+cardNo);
//        Student student = studentDao.getByCarNo(cardNo);
//        System.out.println("程序走到这里了1--------------------------------"+cardNo);
        Stu stu = stuDao.getStuDetailByCardNo(cardNo);//getByCardNo(cardNo,student.getTrainType());
//        System.out.println("程序走到这里了2--------------------------------"+cardNo);
        //获取驾校是否有充足的学员推送数量名额
//        Long studentid = student.getId();
//        System.out.println(stu.getCardNo()+"-----ffff------"+stu.getSchoolId());
        Dept dept = deptDao.queryEntityById(Integer.parseInt(stu.getSchoolId()));
        if(dept.getName().trim().equals("威海鲁东机动车驾驶员培训有限公司")){
            this.sendDl(cardNo);
        }else{
            this.sendZh(cardNo);
//            this.test();
        }
    }


    //中寰计时平台
    public void sendZh(String cardNo){
        System.out.println("中寰计时平台中寰计时平台中寰计时平台中寰计时平台中寰计时平台中寰计时平台中寰计时平台");
//        Student student = studentDao.getByCarNo(cardNo);
//        Stu stu = stuDao.getByCardNo(cardNo,student.getTrainType());

        Stu stu = stuDao.getStuByCardNo(cardNo);
        Student student = studentDao.getByStudentId(stu.getStudentId());

        student.setName(trimStr(student.getName()));
        stu.setName(trimStr(stu.getName()));
        //获取驾校是否有充足的学员推送数量名额
        Long studentid = student.getId();
        Dept dept = deptDao.queryEntityById(Integer.parseInt(stu.getSchoolId()));

        if ((stu != null) && (student != null) && (StringUtils.isNotBlank(student.getPhotoPath()))) {
            StuSyncDTOwhZh stuSyncDTO = new StuSyncDTOwhZh();

            stuSyncDTO.setStudyState(1);
            stuSyncDTO.setName(stu.getName());               // 学员姓名
            stuSyncDTO.setCardNo(stu.getCardNo());          // 证件号
            stuSyncDTO.setInscode(dept.getNumber());
            if(StringUtils.isEmpty(student.getNationality())){
                stuSyncDTO.setNationality("中国");
            }else{
                stuSyncDTO.setNationality(student.getNationality());
            }
            stuSyncDTO.setVehicleType(stu.getTrainType());     // 培训车型（如：C1、C2、B1等）
            if(StringUtils.isEmpty(stu.getSignupDate())){
                stuSyncDTO.setSignUpdate(DateUtil.getNormalDateString().replace("-",""));    // 报名日期（yyyyMMdd）
            }else{
                stuSyncDTO.setSignUpdate(stu.getSignupDate().replace("-",""));    // 报名日期（yyyyMMdd）
            }
//            stuSyncDTO.setSignUpdate(stu.getSignupDate()+" 09:02:03");    // 报名日期（yyyyMMdd）
            stuSyncDTO.setPerdritype(null);                  // 原准驾车型 （如：C1、C2、B1等）
            stuSyncDTO.setPreVehicleCardNo(null);   //原驾驶证号
            stuSyncDTO.setCardFirstDate(null);
            if(StringUtils.isEmpty(stu.getMobile())){
                stuSyncDTO.setTelephone(student.getMobile());            // 手机号
            }else{
                stuSyncDTO.setTelephone(stu.getMobile());            // 手机号
            }
            if(StringUtils.isEmpty(stu.getGender())){
                stuSyncDTO.setSex(student.getGender()+"");              // 性别（1：男，2：女）
            }else{
                stuSyncDTO.setSex(stu.getGender());              // 性别（1：男，2：女）
            }
            stuSyncDTO.setCardNo(stuSyncDTO.getCardNo().toUpperCase());
            stuSyncDTO.setStunum(null);
            if(StringUtils.isEmpty(stu.getAddress())){
                stuSyncDTO.setAddress(student.getAddress());         // 联系地址
            }else{
                stuSyncDTO.setAddress(stu.getAddress());         // 联系地址
            }

            String cardType;
            String cardTypeTemp = stu.getCardType();
            if (IdentityTypeEnum.A.getCardType().equals(cardTypeTemp)) {
                cardType = "1";
            } else if (IdentityTypeEnum.C.getCardType().equals(cardTypeTemp)) {
                cardType = "3";
            } else {
                cardType = "4";
            }

            String busitype;
            String busitypeTemp = student.getLearningCategories();
            if ("初学".equals(busitypeTemp)) {
                busitype = "0";
            } else if ("增驾".equals(busitypeTemp)) {
                busitype = "1";
            } else if ("货运初领".equals(busitypeTemp)) {
                busitype = "11";
            } else if ("货运增领".equals(busitypeTemp)) {
                busitype = "12";
            }else{
                busitype = "9";
            }
            stuSyncDTO.setBusitype(busitype); // 业务类型（0：初领，1：增领）
            //1:保存同时生成国交表数据 ， 0：保存不生成国交表数据
            stuSyncDTO.setIsCreateGJ("1");//是否生成国交数据
            stuSyncDTO.setBrith(stu.getBirth());             // 出生日期 （yyyy-MM-dd）
            String base64Photo;
            //进行获取上传的图片的数据
            List<JSONObject> blist = stuDao.queryBaseImgForCardId(student.getCardNo());
            if(blist.size() > 0){
                base64Photo = blist.get(0).getString("file");
            }else{
                String photoPath = "D:/train/photo.jpg";
                if(!StringUtils.isEmpty(student.getPhotoPath())){
                    photoPath = student.getPhotoPath();
                }
                try {
                    InputStream is = new FileInputStream(new File(photoPath));
                    byte[] bytes = new byte[is.available()];
                    is.read(bytes);
                    base64Photo = Base64.getEncoder().encodeToString(bytes);
                } catch (IOException e) {
                    log.error("图片编码异常,图片路径:{},异常{}", photoPath, e.getMessage());
                    return;
                }
            }
            stuSyncDTO.setHeadPhoto(base64Photo);                           // 报名照片Base64编码






            stuSyncDTO.setDataSource("100");
            stuSyncDTO.setEntityState("2");
            stuSyncDTO.setStunum(null);
            // 时间戳
            Long ts = System.currentTimeMillis();
            if (log.isDebugEnabled()) {
                log.debug("ts:{}", ts);
            }

            // hash字符串
            String sign = DigestUtils.sha256Hex(ts + appSecret + cardNo);
            if (log.isDebugEnabled()) {
                log.debug("sign{}", sign);
            }
            JSONObject stuJson = (JSONObject) JSONObject.parse(JSON.toJSONString(stuSyncDTO));
            if ("初学".equals(busitypeTemp)) {
                stuJson.put("perdritype",null);
                stuJson.put("cardFirstDate",null);
                stuJson.put("preVehicleCardNo",null);
            } else {
                if(stu.getIsPlusCard() == null){
                    stu.setIsPlusCard("0");
                }
                if(stu.getIsPlusCard().trim().equals("1")){
                    if(stu.getLaterType() == null){log.debug("ts:{}", "没有选择上级类型");}
                    if(stu.getFirstDate() == null){log.debug("ts:{}", "没有选择初领日期");}
                    stuSyncDTO.setPerdritype(stu.getLaterType());                  // 原准驾车型 （如：C1、C2、B1等）
                    stuSyncDTO.setPreVehicleCardNo(cardNo);   //原驾驶证号
                    stuSyncDTO.setCardFirstDate(stu.getFirstDate());               // 驾驶证初领日期（yyyy-MM-dd）
                }else{
                    log.debug("ts:{}", "没有选择是否增驾");
                }
            }

            log.error("推送学员信息:{}", stuJson.toString());
            OkHttpClient client = new OkHttpClient().newBuilder().build();
            okhttp3.MediaType mediaType = okhttp3.MediaType.parse("text/plain");
            RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("strParms",stuJson.toString())
                    .build();
            Request request = new Request.Builder()
                    .url("http://36.133.121.106:8085/File/AddStudent")
                    .method("POST", body)
                    .build();
            JSONObject json = null;
            try {
                Response response = client.newCall(request).execute();
                json = (JSONObject) JSONObject.parse(response.body().string());
                System.out.println("中寰推送结果：：：："+json.toString());
                if(!StringUtils.isEmpty(json.getString("Code"))){
                    String code = json.getString("Code");
                    if(code.trim().equals("1")){
                        studentDao.updateStatusById(student.getId(), 1);
                    }else{
                        System.out.println(JSON.toJSONString(stuSyncDTO));
                        System.out.println(json);
                        /*********************进行保存推送失败的结果************************/
                        studentDao.updateResult(student.getId()+"", response.body().string());
                    }
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println();
            //推送成功后，及时更新数量
//            int ispost = Integer.parseInt(student.getIspost());
            String result = json.getString("Code");
            if(result.trim().equals("1")){
                deptDao.updateAuthorization(Integer.parseInt(stu.getSchoolId()));
                studentDao.updateIsPost(Integer.parseInt(studentid+""));
                stuDao.delBaseImgForCardId(stu.getCardNo());//删除文件日志
                //处理一个学员下面有多个推送无纸化的计时的问题,只根据证件号码处理
                studentDao.updateStatusByCardNo(stu.getCardNo());
            }
        }
    }

    //https://mainrest.duolunxc.com/services/common/studentInfoSync/{}/{}
    //威海鲁东驾校
    //多轮计时平台
    public void sendDl(String cardNo){
//        Student student = studentDao.getByCarNo(cardNo);
//        Stu stu = stuDao.getByCardNo(cardNo,student.getTrainType());
        Stu stu = stuDao.getStuByCardNo(cardNo);
        System.out.println("学员基本信息："+JSON.toJSONString(stu));
        Student student = studentDao.getByStudentId(stu.getStudentId());

        student.setName(trimStr(student.getName()));
        stu.setName(trimStr(stu.getName()));

        //获取驾校是否有充足的学员推送数量名额
        Long studentid = student.getId();
        if ((stu != null) && (student != null) && (StringUtils.isNotBlank(student.getPhotoPath()))) {
            StuSyncDTO stuSyncDTO = new StuSyncDTO();
            stuSyncDTO.setLearnStatus("1"); //还是之前的接口加了个入参，学员状态（1、报名，2、退费(退学)）learnStatus
            stuSyncDTO.setName(stu.getName());               // 学员姓名
            stuSyncDTO.setCardnum(stu.getCardNo());          // 证件号

            /*if(StringUtils.isEmpty(student.getNationality())){
                stuSyncDTO.setNationality("中国");
            }else{
                stuSyncDTO.setNationality(student.getNationality());
            }*/

            String cardType;
            String cardTypeTemp = stu.getCardType();
            if (IdentityTypeEnum.A.getCardType().equals(cardTypeTemp)) {
                cardType = "1";
            } else if (IdentityTypeEnum.C.getCardType().equals(cardTypeTemp)) {
                cardType = "3";
            } else {
                cardType = "4";
            }
            stuSyncDTO.setCardnum(stuSyncDTO.getCardnum().toUpperCase());
            stuSyncDTO.setCardtype(cardType);                // 证件类型（1：身份证，2：护照，3：军官证，4：其他）
            if(stu.getGender() == null || stu.getGender().trim().equals("")){
                stuSyncDTO.setSex(student.getGender()+"");              // 性别（1：男，2：女）
            }else{
                stuSyncDTO.setSex(stu.getGender());              // 性别（1：男，2：女）
            }

            stuSyncDTO.setCompanyId(stu.getSchoolName());    // 驾校全称（要和计时平台驾校名称一致）
            stuSyncDTO.setBrith(stu.getBirth());             // 出生日期 （yyyy-MM-dd）

            String busitype;
            String busitypeTemp = student.getLearningCategories();
            if ("初学".equals(busitypeTemp)) {
                busitype = "0";
            } else if ("增驾".equals(busitypeTemp)) {
                busitype = "1";
            } else if ("货运初领".equals(busitypeTemp)) {
                busitype = "11";
            } else if ("货运增领".equals(busitypeTemp)) {
                busitype = "12";
            }else{
                busitype = "9";
            }
            stuSyncDTO.setBusitype(busitype); // 业务类型（0：初领，1：增领）

            stuSyncDTO.setTraintype(stu.getTrainType());     // 培训车型（如：C1、C2、B1等）
            if(stu.getMobile() == null  || stu.getMobile().trim().equals("")){
                stuSyncDTO.setPhone(student.getMobile());            // 手机号
            }else{
                stuSyncDTO.setPhone(stu.getMobile());            // 手机号
            }
            if(stu.getAddress() == null  || stu.getAddress().trim().equals("")){
                stuSyncDTO.setAddress(student.getAddress());         // 联系地址
            }else{
                stuSyncDTO.setAddress(stu.getAddress());         // 联系地址
            }


            String base64Photo;
            //进行获取上传的图片的数据
            List<JSONObject> blist = stuDao.queryBaseImgForCardId(student.getCardNo());
            if(blist.size() > 0){
                base64Photo = blist.get(0).getString("file");
            }else{
                String photoPath = "D:/train/photo.jpg";
                if(!StringUtils.isEmpty(student.getPhotoPath())){
                    photoPath = student.getPhotoPath();
                }
                try {
                    InputStream is = new FileInputStream(new File(photoPath));
                    byte[] bytes = new byte[is.available()];
                    is.read(bytes);
                    base64Photo = Base64.getEncoder().encodeToString(bytes);
                } catch (IOException e) {
                    log.error("图片编码异常,图片路径:{},异常{}", photoPath, e.getMessage());
                    return;
                }
            }
            stuSyncDTO.setPhoto(base64Photo);                           // 报名照片Base64编码
            stuSyncDTO.setApplydate(stu.getSignupDate());    // 报名日期（yyyy-MM-dd）
            stuSyncDTO.setApplyType("1");                    // 报名方式（1一次性缴费 2先学后付 3-分期付款 ）

            if ("初学".equals(busitypeTemp)) {
                stuSyncDTO.setPerdritype("");                  // 原准驾车型 （如：C1、C2、B1等）
                stuSyncDTO.setDrilicnum("");   // 原驾驶证号
                stuSyncDTO.setFstdrilicdate("");               // 驾驶证初领日期（yyyy-MM-dd）
            } else {
                if(stu.getIsPlusCard() == null){
                    stu.setIsPlusCard("0");
                }
                if(stu.getIsPlusCard().trim().equals("1")){
                    if(stu.getLaterType() == null){log.debug("ts:{}", "没有选择上级类型");}
                    if(stu.getFirstDate() == null){log.debug("ts:{}", "没有选择初领日期");}
                    stuSyncDTO.setPerdritype(stu.getLaterType());                  // 原准驾车型 （如：C1、C2、B1等）
                    stuSyncDTO.setDrilicnum(cardNo);   //原驾驶证号
                    stuSyncDTO.setFstdrilicdate(stu.getFirstDate());               // 驾驶证初领日期（yyyy-MM-dd）
                }else{
                    log.debug("ts:{}", "没有选择是否增驾");
                }

            }
            stuSyncDTO.setReferrer("无");                    // 推荐人

            // 时间戳
            Long ts = System.currentTimeMillis();
            if (log.isDebugEnabled()) {
                log.debug("ts:{}", ts);
            }

            // hash字符串
            String sign = DigestUtils.sha256Hex(ts + appSecret + cardNo);
            if (log.isDebugEnabled()) {
                log.debug("sign{}", sign);
            }

            String invokeUrl2 = "https://mainrest.duolunxc.com/services/common/studentInfoSync/" + ts + "/" + sign;
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            try {
                HttpEntity httpEntity = new HttpEntity(objectMapper.writeValueAsString(stuSyncDTO), headers);
                ResponseEntity<Result> entity = restTemplate.postForEntity(invokeUrl2, httpEntity, Result.class);
                log.error(student.getName()+":"+entity.getStatusCode().is2xxSuccessful());
                if (entity.getStatusCode().is2xxSuccessful()){
                    Result result = entity.getBody();
                    if (result.getErrorcode() == 0) {
                        studentDao.updateStatusById(student.getId(), 1);
                        //推送成功后，及时更新数量
                        int ispost = Integer.parseInt(student.getIspost());
                        if(ispost == 0){
                            deptDao.updateAuthorization(Integer.parseInt(stu.getSchoolId()));
                            studentDao.updateIsPost(Integer.parseInt(studentid+""));
                            stuDao.delBaseImgForCardId(stu.getCardNo());
                            //处理一个学员下面有多个推送无纸化的计时的问题,只根据证件号码处理
                            studentDao.updateStatusByCardNo(stu.getCardNo());
                        }
                    } else {
                        log.error("调用{}失败,body:{},result:{}", invokeUrl2, JSON.toJSONString(stuSyncDTO), result);
                        /*********************进行保存推送失败的结果************************/
                        studentDao.updateResult(student.getId()+"", result.toString());
                    }
                }else {
                    log.error("调用{}失败,body:{},response:{}", invokeUrl2, JSON.toJSONString(stuSyncDTO), entity);
                }
            }catch (Exception e){
                //e.printStackTrace();
                log.error("调用{}异常,body:{},exception", invokeUrl2, JSON.toJSONString(stuSyncDTO), e.getMessage());
            }




        }
    }





    public String trimStr(String str){
        String s = str.replaceAll("[\\pP\\pS\\pZ]", "");
        return s;
    }


    /*public static void main(String[] args) {
        String string = " 你？      ?hah ,.。，，-$%^@!~&  ^*()  ）（*  &……%  ￥##@！~是+——）=-谁";
        String s = string.replaceAll("[\\pP\\pS\\pZ]", "");
        System.out.println(s);
    }*/


    public void test(){
        OkHttpClient client = new OkHttpClient().newBuilder().build();
        okhttp3.MediaType mediaType = okhttp3.MediaType.parse("text/plain");
        RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                .addFormDataPart("strParms","{\"inscode\":\"8825314955410586\",\"nationality\":\"中国\",\"cardNo\":\"410522200003017739\",\"name\":\"邓朋宇\",\"sex\":\"1\",\"telephone\":\"17530526167\",\"stunum\":null,\"address\":\"南京\",\"vehicleType\":\"C1\",\"signUpdate\":\"2022-05-08\",\"headPhoto\":\"iVBORw0KGgoAAAANSUhEUgAAAc4AAAPoCAYAAABXjB6yAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABzqADAAQAAAABAAAD6AAAAACUaGHWAABAAElEQVR4AeydB5hcV3m/z8yu5N4kN1m2tLLcezc2trFNbwFiegkQEgh5kjyQhBQIfwgBAgRCaAmhJPAEQgsttNjg3ntvkiV3y02usmxLuzv/7z2jM74a72r3SrtroXnPo9HM3Hvqe8+c3/2+c+7ZxtKlS1vJIAEJSEACEpDAmARmzpzZaI4ZywgSkIAEJCABCXQIKJwdFH6QgAQkIAEJjE1A4RybkTEkIAEJSEACHQIKZweFHyQgAQlIQAJjE1A4x2ZkDAlIQAISkECHgMLZQeEHCUhAAhKQwNgEFM6xGRlDAhKQgAQk0CGgcHZQ+EECEpCABCQwNgGFc2xGxpCABCQgAQl0CCicHRR+kIAEJCABCYxNQOEcm5ExJCABCUhAAh0CCmcHhR8kIAEJSEACYxNQOMdmZAwJSEACEpBAh4DC2UHhBwlIQAISkMDYBBTOsRkZQwISkIAEJNAhoHB2UPhBAhKQgAQkMDYBhXNsRsaQgAQkIAEJdAgonB0UfpCABCQgAQmMTaB/7CjGkIAEJCCBDYFAo9HIzWi1WmvVHNJX81iXfKhAyWutKtOdKNpEq9a2Tt3Zren7eimczWYzTZs2LUMdHBxMvKoB2NOnT0/9/e3qDw8PpxUrVqShoaFqtDV+7uvry3lQFoEyyGM06MQv5RG3TllrrIgnJSABCUwBAcbJlStX5pIYX8vYt6aiGWvLeEy8J554Ii1fvjwn2WijjdImm2wy6jg9Wr7kRz2efPLJPI5OxFhKnozRtIt6jTaOj1anusfXO+Gk4ffff38666yz8gXab7/90oEHHtgRTwBx4X70ox+l8847L4M/4IAD0stf/vK04447djrGmkCQx1133ZV++tOfpuuvvz5f/KOPPjq94AUvyJ+rF5KOwwW59dZb04UXXpizPfLII9OcOXMUzzVB9pwEJPCMEWDc4kUoInLvvfcmXoxv22+/fR4vGdtGC8VQYKw899xz0wUXXJDuu+++PD6T5zbbbJNmzJiRDjvssHTMMcekXXfdNYss+Zcyu/OmTnfccUe65ppr8jhejJDR4nenH+077egLQ6ovxvbdd9897bXXXuO6MRgtv7GOrzfCCVAu1KWXXpo++MEPpnPOOSdbhO9973vT4YcfnoWTOFz4v/mbv0k//vGPO20D2ne+8530L//yLwkRLXdV5Fc6TzlGIsog36uvvrqTxze/+c30yle+Mn384x/PnYGLj8Dyfsopp6SPfOQj6brrrkvbbbdd+ud//ue02267pccff7yT3g8SkIAE1hcCWIbLli1LWJlbbLFF2njjjTseNUQK7xqB8bFbtDjGmLpo0aL03e9+N33ve9/LYsdYOFL41re+lWbOnJle9apXpTe/+c1p//33z2MnZVcD4+ndd9+dLrroomx4YHzgOSzexWrcup+zAIcV+8CDD6bLLr88J997770743/d/MaKv14IJxeKC/m1r30tfexjH0sPP/xwvtBV8MRB/P7pn/4pW4pz587NArrlllumL3zhC+mSSy5Jf/3Xf52+/e1vp6233joL7ZVXXpl+9atfJaxJ7ojID+H9u7/7u3TjjTemE044Ib3zne9M99xzT/rsZz+bfv7zn+e7sA996EMZOHE///nPp69+9atZQLnABglIQALrEwEMBESJwBjHizFt6dKledziZn+XXXZZTUQYT0cKxVhAMBkTFy9enPMocXHNYmmSnnH6sccey8KLl5BxEi8eRslb3vKWtOmmmz5NlG+55Za08847Z8H8q7/6q3TVVVd1vImljLV9p17kifGE6M+fPz+7bdc2vzWlWy+EkwpyobEkucCIIxbgxRdfnOteLvLChQvT97///XxBPvrRj6bXve51WUwBdNJJJyWEEuvwjW98Y3r00UezBcqFxNX7i1/8Il+sM844I4ssbgU6BiY9vnbuyt797nenH/7wh+m1r31t2nfffbNF+pWvfCUdcsgh6fd+7/eypfnII4+siafnJCABCUwaAW7ei4VW1mRgETIuMja9/e1vT694xSuysCGCWJPdFuVolSvjLB61f/u3f0sPhvVG2GGHHdKJJ56YXvKSl2RP21ZbbZXzRzQRwt/85jfZQMEFWwwTjr///e/P42q1fMblPfbYI3sITzvttDxOj1afusdvv/32xHj95S9/OT0eYzpWKOI9mqVcN/9q/PXmcRQu8mte85r0k5/8JL8X/3q1spj4uB+wNrEimevEJYHJ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TjzxxHT88cd3BoheuBi2ceoI0BcvvfTS9J//+Z/plltuyQVzDKHYaKON0nOf+9z02te+Nl1xxRXpe9/7Xpo5c2YWTs4vW7YsXXfddTkuYorIlr5drEviEfiOYBKf1y677JLmzZvXiZ8jxX/Foi35lOPk89BDD6WTTz45i90f/MEfpDe84Q05z3Lul7/8Zfrxj3+c3vSmN6XDDjusJM3vxHniiSeycF911VXpJS95Sdp2223Tr3/96yyge+yxR67Ptddem77+9a/nevDb3W233To3BVtssUWaO3du2nrrrVfL2y8S6FUCkyKc/Fi5S2ag+PnPf54HlpNOOmmN4smdMKL5D//wD3mw2nPPPXv1mtjuKSCAQD366KPp9ttvTytWrMjiQR98+OGH0x133JH7YvGYIHzcDNKvsbouvPDC9KlPfSpbju9///sT4lMsyFtvvTX3eyxZ4vMiH8SY8n74wx/mMqpiSxysPixGyuoWz4GBgfSWt7wl3X333emnP/1pFjVuLIl32WWXpXPPPTcdfPDB6aUvfWnaZpttcntKHuRN3RYuXJjOOeecdNBBB6Xtt98+/yapA23GksWypu78bj/5yU/mvIulud9++6W//Mu/TMccc4xW5xT0TYtY/wlMinDyQ8WdhAh+6EMfSp/5zGfyj5k7ZQaR8qMuePjxMlh97GMfS9wVv+td78p31bqGCiHfJ4vAlltumV7wghfk/obI3HPPPekrX/nK0wSCc1iPWGbf/va3s8Dgdh0IUav204svvjj3Y24Cq/28iBRC/aMf/ahzDkFGVLEWESc+l3SUeeedd6brr78+i+52222XPTkIN2L32GOPpd/85jfp3nvvTfvuu292KZP/3nvvnXbYYYfV8imWMOVVA79H8sCiRbyf97zn5TpQX9jwW0aMd911105+1fR+lkAvEpgU4QQkP0h+bH//93+f/t//+3/p85//fL777nbbIpoMDsS75pprsmi+9a1vzT/S6oDUixfHNk8+AYQEKwsxu+GGG9IJJ5yQrbFqyQgYYoZ1Rz/m5g6he9nLXpbjVvspAoVLE5cpedG/ixBW8yyfEeLTTjsti3I5Vt6pG67iT3ziE2nx4sU5L44hnMXCJX/K/O53v5u+9a1vZQH927/922wN8xushu56kI42UT7W8B/+4R+m3XffPX3jG9/I4sn3/fffP9efvKrtrObrZwn0GoFJE05AssgH8fzIRz6SXww6/HiL5ckPF0uT8wwg73znO5Oi2Wtd8JlvL30S6w0rjj7bHTh//vnnp+985zt5oQ/9F9cpc39FwEoa4iJmuDe5SRzJ9Vri8v6rX/0qYaWSbqSAUG666abpRS96UX7xuTsuwo6L+Re/+EW2SEnTHbAgSVuEnHbiomYR0FFHHZWOj/UEz3/+89Mmm2ySnv3sZ6f/+I//SO9973vTu9/97myRYwkbJCCBNoFJFU6K4AfKYgisTl5f/OIX82Dy6le/OluauGdZtaho2iWfSQKID4LDewl8Lsc333zzbH39zu/8TnrNa16T+I4VxvluISN9SUeeI52vllE+j/ROWvJisc7LX/7ybM12W37cgC5ZsiTffGINVwNxEb3Xve51eQ4Udy8W9iGHHJJvFg444IBEm7gBoK68uDFgARHrE8rxap5+lsBkESg3dvRDfl/dvx1uAOnTnO++yeV3QnrO87nb4zKRdZ504aSyNADxxLL88Ic/nD772c/meRmsTJbSM6eJpUmDu0FNZGPNSwJ1CNAfy4s5xFe96lUdQcRa48dZhK2aL/2dhXH/8z//07Hwquern7lpZJUuea0pUE6pC+/VUOpRPVb9zCDDgqCtttoqr649/fTTs3iSJ+7pavpSD36v73jHO9I+++yTXcH+LqtE/TwZBOin/B7on8zRs/YArw6h9NEzzjgjr4ZnHv85z3lOZ00A5/lNssKchXB4TVgwR56TEaZEOKk4gwluWxYMffCDH8xL37kTxhWE24s7W3+ck3GJzbMuAX5s9913X+6jPLbB/B+eEhYF8QOlr/Ji0QyeEyw20tB/eefxj5/97Gd5Be1YZWMt8txltxhW01EWN5hf+9rXRnxGkzohvtyIjvYb4jgrfRHKU089NQ84DEqkpc6UTxzKou0sbuLZ1XIHX62PnyUw0QTKtB0ruhcsWJD7I78jPCX0QV48PsZ8P88cMwXCC/EkcB7RZLX78uXL84K3T3/604mnM0b7TaxLG6ZMOKkkDaCxmNt85gfLoME7P1iDBNYXAggJd7C86KuIDu5QBArBYS6QG7+qu4g+THyOv+IVr8jPIiNMY/1wiTMQq3NHmr/kt8F5FvHwKoGBhlAEr5SDZUyaNQXmNd/85jenF7/4xbldzO/yO6RdS5cuzc9fszqXMFbd11SO5yQwXgL0X1a0szkHGoFo3nbbbdngQhQJrIdBFPl98Tujj9L/6e/0U+LzG6QvM+fP73WyHmucMuGk8TSc1bO4sViVyDL7z33uc7mxZcGQP9TxdjXjTRQBfnzlB4gg8ePDtflHf/RHaeedd84rbplOwMLE6uMu9/d///fzD7YIG3UhHfOH/PDZwYc+Pd7+TFpe3fGf9axn5ecqyZffEOcZNMpCJurEQMFxBh/mXtlkgbxGC9R5s802y/OY3KV/85vfzAuP8PyQDwOTQQJTSYDfH89DH3744XkHK6YV2MGq9EXOH3rooflRK3SDjXXYRat6k3jsscfmtHhLcNOyQG+ywpQIJz94Ht7GTYsPm0GIgYcl9jzniRsMK5RNEkYaPCar8eYrAQgwjUC/o59iSRbxQkSLZUf/HAirkMU1zKFwR1u2viuihaCx6w5pyIfv/ODXJiCC/Ga4a2a+B3HkjppHXRDmr371q/mO+0/+5E8S4kodeKyL5zFx2bLzEeI/WvnEp37c4fMcKHfyMPD3tzZXyzTrSoB+yk0fzzKzCG7GjBn5BpDfAYF+yVaVH/3oR9OiRYvyM8f8FkvgN4xQ4p7lN4MI40Epv+USb6LeJ104GYz4QbMwiHka7uJZCFTmPD/84Q9nK5QFQ/yQuUv3xztRl9d8xiLADwv3Kz9cXKVYYuXHyrnyw+MdFyd3umfEAgX6ctnPlTJIg/ggdtwlc67kM1YdRjpPeWeffXaeZ8WlyvoAxJLB4U//9E/z85bsN4tQspAHkWQulmMILN/ZzGCkQN7cqeOi5bfJTQDzt3xmSz7OlXaXGwd/kyOR9NhEEii/QaxOPtPnqoHvCCqCyWfiVAPf8RCxkQf6UvpwNc5EfV7zZMg6llJEk8dQeJC7iCYN4sX8EAMC4sn7l770pbwvKOnWZdBZx2qbvAcIIA78QD/+8Y+n4+MZRgSPnXIQPB6N+vM///O8CrX8OOmvuEVxwZKWTQNYRFOEhfN8Z94Fq5C747Xtw+TP/rQskiBfBgJEvQwWWJ/Ug9/M5ZdfnjcOYfMQhLBsi8em71iT5FUN1Ik6c5wpE54hpd2IfZlD4nz5DSKmeIa4KTBIYLIJFF3oFs1SLr9HdKP8Lsvx8k46zpPPZIbVf1UTWBI/Pn50zGniOqqKZrXRVcuTXUu+8IUv5F1QSL+2A88ENsOsNmACbNyOUGKhsSiGF6v2WHXKc4xlfqWIDy4gfpC4gRAcls3Tl+mn9GOEjvkVzuNerfbzOhjJj7+owjOZWI78LqgDx3mnDliZ73nPexJ75bIBO/OU//iP/5jduDzzyUIi5oJKIA3i+8Y3vjG3EcuaDe5pO2JLnckf0WfHIG52WWjE3rjve9/78j63nDdIQAIpTYpw8uNmhRQ/Pn78uJbe9ra35YFkpMGkankySLDDEH+RogxYXigJTAYBlrXTz9iuDiFiCz3mJssxXLjcweIC/f73v5/e/va350dMWHiA8JCOHYW4yaO/I6Z85jyLG0bq62O1A3GiPDZkR9RYEDEQc6sIHy/EHXFm1SEWJ4KHpci8D78Xfj+kYa4V4SQeeVIXjrGRO4/KsN6Ajd2ZT3rlK1+Z54OwmHlx00De8OFmAGvTG9mxrpzne4nApM1xspiCHyB/Bom7XH64/PBHC9yxc+f8gQ98IK+0ZWAySGAyCCAwiMgPfvCDvDANVyh/Qow5Qfosz5Lx/CbWHuKFG5d5QP6EGA9lI0ysamULPoST3XeYiuBvZrK3K9/X1NfHahNCN3v27Pw4Cwt/sAJ54VJlTpO5T1ypBMopi5B4ppR0zAFRV35PWM24ZGkr85+ILjcDLNNngR7CyWIj0tBWXNTF0uY3yWpe/hLLuriex2qv5yXw20agEXewo6vZOrSGwYln3/iB83m8Awl3tvxY+fGON806VNOkPUoA8WCzdP4kF8vey9J2+h4PWmNlIZD8cWcEkTiIGIsT6JdMQ7CZAI9+YOXxmbi4SdncfW2szXIpEE7KQLj4zG8IyxELkT+IzdxlNfD7wmJmERGLh8pvjjaS/pb4e6PsPYu4sxMQy/aZ3+XGgHJ4YYlys4CVSrkcI19c2dxQdP/d0Wr5fpZALxGIKZ7GpAknIPnREvgR1gn8YNdl4KlTlnF7k0ARJ1rPzVrxiHCc/sc7wkPf5TwvBKX0S+KUfsqxkl8RnLp9fqSrUPLkHJ8RROpB3tX8qQeB+vEaKZTFPVitxK+2hfjkW/KvpqccplJGy7ca188S6AUCky6cvQDRNv52E6iK02gtGU+ckrZO3JJmKt6LuBbhn4oyLUMCGyIBhHPS5jg3RGC2acMjULXcRmvdeOKUtHXiljRT8a5gTgVly+gVApOyqrZX4NlOCUhAAhLoPQIKZ+9dc1ssAQlIQALrQEDhXAd4JpWABCQggd4joHD23jW3xRKQgAQksA4EFM51gGdSCUhAAhLoPQIKZ+9dc1ssAQlIQALrQEDhXAd4JpWABCQggd4joHD23jW3xRKQgAQksA4EFM51gGdSCUhAAhLoPQIKZ+9dc1ssAQlIQALrQEDhXAd4JpWABCQggd4j0B9/dqH3Wm2LJSABCUhAAmtJoL+5YsVaJjWZBCQgAQlIoPcI9G8VfxHeIAEJSEACEpDA+Ag4xzk+TsaSgAQkIAEJZAIKpx1BAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEAC/VONoBV74zaaodfskVv2yW1FLVrDqdVqpcbw8FRXyfIkIAEJSEAC4yYwZcKJYGahfOKJ1Lrv/tR67NGUnox9chHL/v7U2mLz1Nh6m9TacquIF/XneLwMEpCABCQggfWJwKQLZyusS6zIxkMPpaE770zDt92ehu+6M7Xie+vxJ9oW5vSNUtp6y9TcYYfUnLNL6pu9S2psOzO1pk3TAl2feot1kYAEJCCBNKnCiWimZY+mwWuvTUPXXJNaSx9IrfzXWMKkbMarvy+1Ul9chnDPPvBgGrp/aRpauCANbbFl6tt999Q88MCUttsuXyatT3urBCQgAQmsDwQmRTizWzZa17r55jR45plpiL/AwtwlQtqHUI4QENJmnBtupeEQ0eELL0rNhQtT/xGHh4AepPU5AjIPSUACEpDA1BOYcOHMojk0mIavuTYNnnVmGn445jLDshxVMEdqc197se/wgw+mFaednvofejj1H3VUam22ma7bkXh5TAISkIAEpoxAW6EmsDjmM4fDNbvy9DPS8CPL2qK5tvljoQ4NpcHLLkuD55yT0vLHU6sx4VVe29qZTgISkIAEepDAhKoQc5rDixenleedF6tmHwsrc4KyHxyMOdKr0+AVl4eQDoZ4suzWIAEJSEACEph6AhPmqs0LgR58KA2ed24sAnpw4kQTJiGUrXh0Zejyy1Lf9tunxm675cdV1gXXeMV3XIuSEPKYn20/hzpUv1qkj7nfVszvNobXnH689a5WYrU2RFFRSvX0mJ9XS09skmP5U+/wCHTCqnakoZjPjudyxx3wLMSrxepr5sINEpCABNZjAhMmnDx3OcTq2buWjCyaIQqtsBzz5gfMeY4a4tnNoXixWIiBuIT43Hrk0TR0xRVp2uzZqbXxxuv0nGetAbrUI6qTH69BNMojplSRZ1OvviSlzbdIad/92guhyvlV9W+FID5NgErbHluWhm+4PjVm75xas3YaXTx4tpVVyfHeqqDJ2VBHXsG5Ghocg3dxcXN+5YrUGFzZjlbaVp6Z5Xv5jKD1T4tXpZvEea5juvfOWDG9LG5i9shMcpqHHkyte+9OjZ12TilWRo/GOIt/3CjkulGfe+9JrSWR367zU9pmRpsfteMcNxKlPtWG+VkCEpDAM0SgMiKufQ2ytbn0/jR4zVUhemExdLtoYwBs7rRTmnbMs9Pg9denoauufnocisfaCEFsbrd9bJJwX1iZT6wunjGADt52W2redFPqOyAeVQm3bd2AVdhadFMavuKybOV00mcBiYE6/nVCaEhz+x1T86hn5/q2aNvtt4eAP5zrlQUAcQlreHjBjfGozZOpP0Sp1QdWrMdV1lOIT2OXOam1ySYd8SyWYxYPrNVHH0npqstTY8dZq+Zxn6oIgpvjPxCP65z2m3bcqFtbPSNe3GQ0ECq43XprWG6rrMA41dh889R3xLNSY2AgjseBKGf4vHPScPDlXHo85o0R0kifrUdc7FHPLJYrB1Nz/q6pcXikXyVeuVbLH0ut66/N7WzutXdUJCoTwtwI63N48c1Z8Br7H5haFWs0syAPopL+1ltiDvzhHKe1ZEl4Ke5PzfujTptuFu0KbsG1MWNmSrvMTY2N4jnfVeVHYQYJSEACzyiBCRFOLJ1hBuwHQ1D6GNG7QgyCfUcflfpOOik1eDTlP76ehq4Mka1aMjGoN2Zsnaaf9JrUd8ghaeWvT0krf/TjGGUr+fH5ySfT8KJFqW+vvVIr0pcBvavENX5tbBmbLcyb1xaoGJAbIR7MoTbn7xYbL2wXY3QM3ByP8ojbrkN8DiEcvnlxGr492ooFF5ZiK9I2SYN4hUAOhkWcloUIrlyZGjO3DfmMm4ZNQ7ziM6LQGo45Wiysq6/KgpXzRhQefjgew1mamk/8OD96k8sPQW3MDPEIEWrEDQVWXN/xJ6ZWxBu+9prUCFFPd9+VmtxERB1yXrvt/pTIxCYTWLJYxHEyXlEOohqvvn32Sc1990+tG65Lw7ExRd9zX5DzHbrkwtS33wHx/GyI8JXRlmhfJ+QsqGtsXhGvxsCuqXXRhfmGgbIbK8KKDTEcvuqK1Ig65pAZbp3SvBDgTTfNh/AcDAdvbnwa8ZxuY6tgvPVWKWEFR74IZyt4tO5e0r6J2nijuM7t7PxfAhKQwDNNYGKEE0vjllvbFku3tUkLW5y/JQ+GWJ7T3/TmtGLwGyFW16U0LaoQllxzxx3StFe/OjWPPS4P7A2snpECY//dITzhJkzbbBN51xtRs4W3447hTpzd1hLKeOCBEI87UjPEpLFrCE/VkiV/LCfeQ6ibRx8TBt6x+WsrBHTovLNT88TnpQYuVuI98kgaOv3XsQPSQGocenhuWyvan59RXSXIKVyaw7fdnJq4Jtk1iby32jo1BwayBYY+Zev7wajX4rCu99w7W6spdlLKLtCwCtmmsDk9tiqEHxYZj+pstHFqzdg22hX5IZQbB8Nbbya3pwLWb8QbDqt9OCy9LKph2Q/+74/a7YyYQ1deHjdAkW+4ZJu77hpZRV6Zc4hjxM3pIo98Y3DTwhwPixP3MUJP/VvLwnJFqKkKN0hx04HVnG90iBDXt7lDCD9CjyWfI0ZkyuJ7WKStsEANEpCABNY3AjGirVvATdsKIRi6797RM4rBkLnJwR/9KPW/5jWpMW9emvamN6XWV7+WhhYtTn277JymvfGNqXnEEdmqG7rggjR48ikxiI6QZRxrhauPwbtvxowRIox9KGsAIpfzj/9wCbN7EQt0EE3OVUMZ8DmGNRTCnR5fnhpYcmEltbCwsD4jXeueEHX24p0zkBKiwvwi1ttmsRfvqjwbuDW33T5E+Li2u7S4dFedb4tH5HVT7KKE1VdClDd88QVp6Prr2m7RsMiYr0xLw1KNG4Hmic8PIZ6+ygpvRFWjTbmxkQGF07aYI23M3yP1zZ0XB0Ko4vohnnmONSxiXKzZ8iMd5xDIR8OTEPO3uLlTXOfh2N0Jiz3tultqRj6taDt5hCyWmrbzRgQRb1zC1IUXxyJe64m2ld+447Y4HvlWQ5TTWh58tw5LdbU8q5H8LAEJSOCZIbDOwokF1worK4X7LS/oGbEdMViGqKw87bTU2GTj1Peq303NsDSmv/ktaeXPf5b6X/TC1Dz0sFiwEo+dnH12WvG974W1Ea6+0RYRhRs0WyN5EB6xwNEPMnh3RLMdrRXPh6KbeVBn8Q1xsgVUson6I6qUh0V52q/bohKu0+Y2saduWL9DV125KrNYGRp77rbuiD15Fy/Kc4p9zzo6NXB/5nxX5Rl5tf9KTIgTWlINlNNsu4qrh7Hcidu3+x7xX6TbJOYDwx2btgmBiTnLIkxtGYqIq/HBWnwyDV0Xc5Pc5ITAdq4XNwAPhNhHe9J117TFluSrbiAaIY7NAw5KjUdi1fTVV7TTr1rZzHxv67KLo62LM6NOfRHZsIabe+yVmjFH2hFwIsQ53NbNsKQb8VrtRiXqnG9egh1egNWvQyd3P0hAAhJ4xgiss3AyODeeeDI/LvK0RUHVZjGIh3W04uST00YsWHnRi2Mw3j9NnxsbuvNXUWIhyuDZZ6WViGbsaTuqaJInAvTY8vgQedYILI5p3XhDGr7kolX5r0ofi3qYsxs65eSnl0u9ww3ahzXHqlnKDOux7/AjUyPm7VgNOsxjMuGWbUW7Wheel+M1Djks13H4nDOzpVatKcLWwg17wbltAUNkqoEyo40smMFCfCrEcbYl3DjmdplTjflXLLe0WViDYXUifsPRPh7dyYLD/GTsFZwFlDI22TTmmo+NPGMVMG5abniIybxkuFYb28Um+2Edh6naFkFWuMZiJQSehU/ptltTuufe1Nxll6hf5IcABpPGUceGt+DokS8HLt8R2oeVOnhBsIq5zgbldUK0kfjhBWhsG27nmte4k40fJCABCUwSgXUXzqhYdlGGddIYaX6zWnEW1IR19+QPfxjiuUXqO+GEVaK5Mg3/5tdp5Q9+EIN4uP1GszRX5ZVXh4Z1WntMxbiLOda+Y46JD/ElQnZnhutxOAb45sGHpKGLY3HMnnulNHvnp1bF9k3LLstVxbfLRdgWhSv1nLNSY+c57ccoov1YZ0OxarUZ86bNg0M8Qwe6Q15hGjcbw6wiRQhHC2HlNubNC3GN8kvIohJCj0s2BHx4ecyVsiIX8Xk0Ft2Ee7iJRcq851ZbhYUf86h5wVOIHHmgS3HTMXx1WMjkv9PO+cagiUUcebPCFrFuxaKjtHlY1NuH9YzLlnPxJ9+azNuy+ImblxD4VghzK25EhmIulvw6IeKzWAqrsnnkUTn9aue4+dgr5pRZlbvKsm2f1+LscPKDBCSwXhKYEOHMjw4wuI4zYLE0YzFNCdndi9HFYByW1JiBONVBeswE7Qhho6VWWLeJxxwIkU0zBGyIFaq7zkuNeSEy8ZhFCjFp8nxiZUDHbZnn+CINwjd0Q7g877gj9c3fPTUOOqQ9z0eeM7dLfUcdk4bCmmqde1Ys3gmBqzYJAYq5RhZJ9b38leHOnL66qJDHaiEEerD9DCiIUnzGumwi7DHH2wxrePjG61Pi75jGNWjGgqk+Hp/BOoYnbY5VtFmsV8uXvFaGZRePo6yKl0/TPlbHDq5+LRq4dufOzTcIw1dc+pTgY3Ee/ezUf9gRkbDS0FzZ+F4V/VJ+HM4W58UXpcbCG9vWa04biYJPfjHHyeKvap4lve8SkIAEnkEC6y6cDHQxODbilYVmTQNdDNB9++8Xq2rfkoWqFXNrrXtx/c1J/SeeGJbOk/kRFI7nhSmjgMlzg6y6peyaIa/qRBAZvBEVVtTef3/qP+jQ9pxe5Jl374k4ZY6vPHNZiuJ7c+e5sQp3/zQUFt7QT36YGqx4JZA+FsRk8Yqvw/G4R3W6lPKz2zPEn9o3cIGOEbIcFa7xBRdtI6zivOAoRDJbhSxEggf5h9ubFbFZLEkXgtpZ0ZrLinhYm5tFPjuEK3Y1V2lkEXOhLH5aLXRQdz7ksnjsZDgWMOXnUFdLEF8oI1Ywp3jspf18ZtSNODO3TX3POSEs1/AucIAFVuFyhluLR09wA1NvHl+Jl4+iAM0gAQmsLwTWWTixwpjnyisnY8u9EZ/jpLURr//gg1P/m96YGnPmxpxaLKj56U9ite2VsUjoTflPh/W9IJ4lDDfiyl/+Mg/8o1obDMisqEUo1iE0wi2Jy7KJFTp7dnY7Pj27KAO3MC5VBnOKjPdGPHfYivm/FOn7wt3Y2C9Wo/KM5IOxScGFF8Y8ZDx3GY+YJISzElosbIpnFFOUmV3bYUHWClEXFs2w6rRtUYYYxY1GIyzPbl6ZTghb6+bF2WXKHGz7udcQ7ciH1b9ho0bxWKZPBYSXeU+eaR0zsJr4niV5g4cGVm97lVVmMXzvffFHy++KxUx7dlYVN8Kt3Lr9tvxYTWb5RLRj9pzMkf2Nm0fGXGmIJVY1lnSDhVvhCWiwMMogAQlIYD0gsM7CmcUrHhtohvtzKP4M2Mgh/lx1/FHq/re8OSy1XdorU3/2s7TyF78M6ysWDH33+2l6DPystJ32spe13Xjx58RGDKEGrMxtssNORAgpqx3YrCC7PGP3oKFFN6X+l748W4zZFVvJLVuaj8Z2eBefHxZezMdRdwIFh1XU4HlDLDwW8PB4Cpbs42EtY8Eh6t3CHt/zIyyxYrh5yKH5dO36x01D36zZKcVmDbmcsOJbYTG3HooFVSOFEKPhRQtTY364obPwU/n4yLOVWK55oU9FOLkpYJOJsALHFcgz5lKbBxycbySw1qOVMW8Z7uiYOx5acEMnm8wXQVy0KOY2Yx6ZzQ7i1YiVt41weQ9fHqtzr7wsNXCZh+DDis0U+tiEIqzU9o1CJzs/SEACEnhGCKyzcGYLJty0fTEAD91889MbgXjEQpX+l788iybW1uD3v58fTWEgZADnYfyV3/rv1P+2t8bzhXPTtJNeHSs4b0uDNyx4+kKhGJPZbSax20ykrxuyaMaCluHzz8vPI/Yff2K2gJ/apg7Bi1xZDZpCCMOV2rrzrtTYe7/QnbZ7tVNmuEBxmw7HatPhJbGYhkCbsP5iBWuer+0IaKRF5OLZy+ywnBXWarewtnNY8//UYePpqRnWY24/Is1zlA8HmFJWfMwLrFbEOQQdkZwWi4WIEsKLCzVvKB9Wa96hp+KqJSm7HuFOxnWaNy+Idq6+gKerirECtnXn7bmszJE6MifMvrUhoPnuhoyjLq277oz+EPO+LDriRgtLPlg3do555RlhhbNw6ebF+WaAHZEay+PGJf4qTt+xz4k2hDt8bZh1VdevEpCABNaFwDoLJ4W3YsuYxq4DqXHJJXlzgtVchlgkDKKxl+twzEsOnfx/acWZsRKV47wIsRqVDeLTt7+VGm99awysm6bhshNNO8ZT/8eKW3bYyYM6rtEaIVs8Ny1Kg6efGrvnTE/9L/udWPAyL9ePmrRC4JvxGjr79NS49ebsom3dc3dewMOOOO1FNKGqlBsDeF7ZevQxqT+vGm1XJG++jhs05m7T/ffm502be++b4zfC/Tl843WxecCuecVqFpUa9SdqIx41GVx4YwhVCBCBeoTF2+TRkdiFqMVip5/9NFuTWfTDoqM8tuxjqz4ex2Fel43V08wZMZ8ZFnLlBiRb2eHCxkXKHxJPZ8azt2HtNVipi5CuKrMjYIGjFS56FkPlZ0PbMdr1Css1u9SzYgdhVuCGEDZxvbL9YFxLbjoaZ5yab66iF4W3ISzkeM6U7Q9T7CzUHNovxPauqGfMuzKXHuUZJCABCTyTBBrDl102MUNRuC5XnvrrNHjpZU8JYrVlYVk0NooFRMxZEYpotr+1/w8RaMYuQgzyQ4tvXm1AzxGipn27zE7TXh6CF+7hEVeKVvPr+pyFk/nBEI0GYsacX4h6Cfl8PF/ZiofvU+xOFOZQzLfFxuwDIXRYuZii4bplg/MGAztzgFHnasg3BLgY47GWXM7AvLwbT4Ot8XD7Rt6N3XePfJlvrGExB6+8mCpcy9liw52J4AX3FgLNvq5775N3EWph/ZI3FvEWMe8Yi694FjU/txlClV3LPDpE3bvq32nLqsd1IkLMR26R5zDZRSiFsHETxHOk6cDYFCHKHV6woC2s7PRT8sONHTcdbFTRiMVBOY+4ociPuoTlmK1g5juxLhFyykFgI182d8/MsarjOK5fbmw6efPZIAEJSOAZINA85JDGhAknLsBGWEFP/PSnsbAjBkIG5u7AoDqSYFbjrZo3fNqznJG2GYI67cQTU4MBu47oVPLPFhWuR+You/OI0Tlv3k4dGccJjNhRdlWkV1+hmmM97b9cDkcRoCgnu7QRv5w3ZZcCnpZ0jAPkMXKUXFUErS0zOVK24ig/RLbT9sr5kXPqPhp1jfSj1jmKRNxGCvloaeuqeOVYpz5VFGWf3Vzn6omRcveYBCQggaklgHBOiKs2V5uBedaOqT+2zhs8J55fDJfh00RyLNEko9EEN4S5GQtKGnuEy7CjarnkWv/lwb9iZa6WOMbpp4npahHaX0YVkErcTpzqalAEuIhIJW69j+QxeooGf8u0KxRJW2Pbu9LU+gq38VyTrniTVp9alTeyBCQggXoERjAL62VQYrcFoRGrZw9IffHYSX4Oc51FouQeejpvIPU968hVz/U9XRyeiuknCUhAAhKQwOQRmDDhpIpZPGOHmb4jj0z9RxweahcrJnG9rm1YJbz9saH4tOcc3577CsvWIAEJSEACEnimCEycq3ZVC7J4xqMY/fF3NZuxqGTwnHPzBuLZBTseV20hwcYAIcL9++8bjyIcm7eUqy7kKdF8l4AEJCABCUwlgQkXTiqPeLbi2cHmYYel6bEn68rLLs/PTLaWx6MPhLyAJd6rQop1GQt28hqTWHXJ85zsNJQf3GdD89HmJXOG/icBCUhAAhKYGgKTIpxUvT3nGct4ZscfqY7nAFv77hOPYizOW7ANPxx/6oo/bcWeqiGYPJqQNxGPxw+a228Xz/nF33+cMxBWZmzlx3nds1PTGyxFAhKQgATGJDBpwllKzo9BxKYCjXjusH/uQN4jNfH3ItlRJluYIYxsdhCradkonb8mkudGIwMFs1D0XQISkIAE1hcCky6cNLRtfYb7lucn+fNUIaTVUNbI5g0IOvGrMfwsAQlIQAISWD8ITIlwlqYW9607wBQivktAAhKQwG8bgQl9HOW3rfHWVwISkIAEJFCXgMJZl5jxJSABCUigpwkonD19+W28BCQgAQnUJaBw1iVmfAlIQAIS6GkCCmdPX34bLwEJSEACdQkonHWJGV8CEpCABHqagMLZ05ffxktAAhKQQF0CCmddYsaXgAQkIIGeJtCf3Ae2pzuAjZeABCQggXoE+gd33rleCmNLQAISkIAEephA//CMGT3cfJsuAQlIQAISqEdAV209XsaWgAQkIIEeJ+DioB7vADZfAhKQgATqEVA46/EytgQkIAEJ9DgBhbPHO4DNl4AEJCCBegQUznq8jC0BCUhAAj1OQOHs8Q5g8yUgAQlIoB4BhbMeL2NLQAISkECPE1A4e7wD2HwJSEACEqhHQOGsx8vYEpCABCTQ4wQUzh7vADZfAhKQgATqEVA46/EytgQkIAEJ9DgBhbPHO4DNl4AEJCCBegQUznq8jC0BCUhAAj1OQOHs8Q5g8yUgAQlIoB4BhbMeL2NLQAISkECPE1A4e7wD2HwJSEACEqhHQOGsx8vYEpCABCTQ4wQUzh7vADZfAhKQgATqEVA46/EytgQkIAEJ9DgBhbPHO4DNl4AEJCCBegQUznq8jC0BCUhAAj1OQOHs8Q5g8yUgAQlIoB4BhbMeL2NLQAISkECPE1A4e7wD2HwJSEACEqhHQOGsx8vYEpCABCTQ4wQUzh7vADZfAhKQgATqEVA46/EytgQkIAEJ9DgBhbPHO4DNl4AEJCCBegQUznq8jC0BCUhAAj1OQOHs8Q5g8yUgAQlIoB4BhbMeL2NLQAISkECPE1A4e7wD2HwJSEACEqhHQOGsx8vYEpCABCTQ4wQUzh7vADZfAhKQgATqEVA46/EytgQkIAEJ9DgBhbPHO4DNl4AEJCCBegQUznq8jC0BCUhAAj1OQOHs8Q5g8yUgAQlIoB4BhbMeL2NLQAISkECPE1A4e7wD2HwJSEACEqhHQOGsx8vYEpCABCTQ4wQUzh7vADZfAhKQgATqEVA46/EytgQkIAEJ9DgBhbPHO4DNl4AEJCCBegQUznq8jC0BCUhAAj1OQOHs8Q5g8yUgAQlIoB4BhbMeL2NLQAISkECPE1A4e7wD2HwJSEACEqhHQOGsx8vYEpCABCTQ4wQUzh7vADZfAhKQgATqEVivhLPRaNSqfd34tTI3sgQkIAEJSGAEAv0jHFvrQ81mW4eHh4cTotbf359arVYnP47xfWhoqHO8r68vxx0cHMzHp0+fnuMTp+RHOvLkVQ2k4RzxSnnV83ymPOKVUOKX76O9U75BAhKQgAQk0E1gQoQTMVq5cmW65ppr0i677JJ22GGH9MADD6Tbb7+9I5Cl4GnTpuU4m222WRa0W2+9Na1YsSItXbo0LVu2LM2ZMycRZ9ttt02LFy/O50i7/fbbp/nz53dEEGE7//zz03bbbZf23nvvTnmIaxFrBHWbbbbJeZZjTzzxRLr//vufJsKlfrQF8aZ8RL2kK+d9l4AEJCCB3iYwIcIJQoTsvvvuS1dddVU68cQT05NPPpnOPvvsNHfu3I7lyLEHH3wwbbXVVmmLLbbIonTnnXemhx9+OL+WL1+eBXjTTTfNeS1YsCAdeeSR6d57700XXXRRFrt58+Zl6xJRQ2w32WSTnP/dd9+dLr744jQwMNCxdDlGWRwrFuRDDz2UBRexRiRHCojmsccem6hHVTgRYr5Xj42U3mMSkIAEJLDhEpgQ4URIELAXvOAFWeCwPhElrMo999wzCxnfH3nkkXTllVd2aGJZzpo1K2EFInDEx9rjMwKLgGFBbr755lloETvEi3O33XZbQmgRVaxW8ic/xA4XMek22mijbDWWAomDhfqSl7wkix/fuwNtQZQ33njj1axS8kPgaSf5Kp7d5PwuAQlIoDcITIhwIkC4ZhGyo446KovYDTfckL9ffvnlHcuOucYyL1nwIkC4aBEkPnP+0UcfzYJ63XXXpXvuuSe7a4mz00475bw4X/JHpHEJb7311h3BQ0CxMBHQauAY+Zd51Oq57s/kS/oirkuWLElnnHFGvhE44ogjFM5uYH6XgAQk0CMEVleWtWw0ViDzhmeddVY6/PDD0wEHHJCFBauN7wgZAYvt0ksv7YgOooT1+Nhjj2Vr8/HHH09bbrllx9pE5BBFLEAsSeLh4t15553TSSedlH7+85/n+VLKuPbaa7PAUo8yN4mQYx2WcMstt6RLLrmkI4Ycpw68EO2qFUl5xxxzTJ4jLVbvrrvumudaq/FK3r5LQAISkEBvEJgQ4cSS22233fL8JBYmC4RwuyJazDuWgOCU4xxDKO+66640e/bsbN0heIgUC4GwNLFCEUnS4Kbl2I477piFDrFG8HD/MteJC/bggw/uzGWS/4wZM7IlWuY3cQHjOi5pOV7cvnvssUcuh3McxyrlVUQSi/boo48m286x/MX/JCABCUigpwhMiHAWYvvuu28aiIU4CB6uzuK2LefLO2KEOPE+c+bMvOoVa5DFQwgXc5YEBJRjxEPYiju3iCgWJWJKHAQUC5W45MF7eeHmxQpmzpQ8cfUi0IghK3exUqk71iwuWeJgLZf8qAt5FWHnu0ECEpCABHqTwIQJJ9YfAnb99dfnlbSsqMWiRKAQMgLiQzwswRe/+MX5M+J09dVXZ4sTVyzxywtLErFC0HCx4j5FjHHfkj9p5AckPQAAQABJREFU99prr3TIIYdky5VFRsTBysWyRMQRaASXPAnU6cwzz8yiiQXJeQLvCPEFF1yQ64/7l/qWQFmsGmahEmVUz5U4vktAAhKQwIZPYMJ2DkIcy+MoYMMqxMrDosSNi4ixuAehwxpFeHCF4l7db7/9slsX4SUuwsrzl6RBzBC+/fffPx100EFZYMmHlbFYkIgYrlxElhW2nENsecwFEccVjPWIYBOwLnkkBXdyEfR8Iv4jLwQX6xcLtpynrliizKmyKrjkVdL5LgEJSEACvUNgwixOxIWVrjxegvDxHUFDHBEuxJKACBIQH0TxvPPOy0KGOxUhRNQ4x4pWxAtrEwHEykRMjz/++Jwv+SBslINI88xmyZN3zvHicwnUgTqyAIl6Fiu0nEdweU705ptvTjfeeGNe2MQ58qBsLFs2d6BMgwQkIAEJ9CaBCRFOhAXBw8rDlYqwFEHDBYqbk1f5zDm+I35scMDnU045JVt8LCiqroTlsiCgJ5xwQnavIsQIHmlKOViIrNhFqM8999ws0sxZYt1SJi9EFPG944470vEhvuWRFc6RX8kLkR8IS5dHYXbffff8TCnnEXCsY0K34OaD/icBCUhAAj1BYEKEE1HCBYoYsUL2nHPOyUKKNYnAIVZFmLDqcMkyr8nzkLhyeQYUAWOOkvPEJSDIzElyDgsUYeQzLlnmKRFUxI0FPiweQiyZo2TxD3Oil112WRY5tvE77rjjsvhhNeKmZQMFHp+hfqzIJW/KpcyBEE7Koz2lLqX+PdErbKQEJCABCYxKoBFiNSF+R9yguF7Lrj+IIAEhKuJTrQWLbHCZEhBHXKi4eKsLb0iLyCLKCGQRN1yzWI9Yh7hOEUqsV9JiDbLIiHSIIt85Tlnkh8gXkcZCRiBxEVOfUs8Sj7TlWLXufpaABCQggd4kELrTmDDhRGx4ITbdc4sj4UWQiFsCliahW6jIk9AtYiU+x4lDupKW8gklbXdZ+WT8V/IY7XyJ57sEJCABCUgAAgjnhLhqyawqXFVB5Nx4AlZgnVCNXwSzpB9v+dU8SlrfJSABCUhAAmsiMGGPo6ypEM9JQAISkIAENhQCCueGciVthwQkIAEJTAkBhXNKMFuIBCQgAQlsKAQUzg3lStoOCUhAAhKYEgIK55RgthAJSEACEthQCEzYqloe/SiPf4wHzppWvpbHScYTp1oW8UsdulfaVuN1fybNWPFHy5e6VlcUd+dd/U4eJZ/qcT6PJ4+Sdk117a5PKXNNLLvrMtb3kudodeb8SHUs9R8r/3J+TXmUcyXPUmY5XvKovucHm+I/9teIKqZm+0mnapT8eTjOE2e0QFrCWHGIRl4Eyirp2kfa/5NHicORUi+SVZ7Wakeu8T/5lBd3x6Wc7rKoI2VxvpTdKWZV3ThvkIAEniIwIcLJoMUmBmxEUAayUgQDeXXQZmDj+Uk2JGDzgWogLS/2iuWdPxxdBsLqoyMc4+9olv1vics2fWx0UPbLZUeiarnVcoowkw87CFH3vffeu1MWcTlXyuadzeLZ4IF4JV82Yli4cGHeQIGNGEody3spp+RHOeUvwJRz5MUORWzpB5fCoFpfyidPNtFnT9/58+dXT3c+Ux82o4ctuyGRht2VODYv9uBlwwgC+ZU2dBLX+AB38qXebHhBXtSbfLkubLhPeeX6lvJI110u6QjEqQb4sL0i5/nMO9s68mfkYM1mGZTFdeG60zb2E6bM7rzIdzAeGb7lvuH0SOz3sf/OfWlwKOq6PLgOR/5RBYrn1R+PE2++cSNtsVE85xuKE0Wn6JW5akMR4ca7h9M9j7TSQXOaacam3DS1ax29JUWW0b62EN52/3B6MrZn3mOHZtQppUej3IeivJWDwamdJE2P41vF1s2bbdTOHxQrB1Na8jA7WKU0e5uo26q4I72RDylzHdtZ5GjUiXyWrWilRx+PP2ywrJWeiM9zZjbTTpEn52nzw4+30sK7W2nG5o00sG0jPRZ7ljwc9RyMJ8PIbuP4+/NbbprS9L5K5rmEOB+HyAMhLgxWncrHOUegjvyX4/E5QklLlHye91VxOG+QwPpOYHXlWsvaMqgxqPOXQ8qmAhxjoERMGdBKYFBjQGSPWgZ4vpOGdwbjq666Km/Hx185IU/yYccgxKJsgceuQGeccUY+xzG+M5DyZ8LYDagIB7sXXXrppTktfwCbQRsxQbzK4EocNnRHaBl8OU6ZfC5tQfDYvo/68bdCOc5gzR/Z5jhxET4GeHYg2mefffKgzraClMdx6kQ80pMWAWSQR/CpFzzYwYgyaA9pqAvvJW+Eg+0G+QsyJZT6Ug5tv+mmm/Jm9GxDCHfy4uYAgSMvxAZmAwMDuZ0ln/G+w6aUxfXhL9sg2JTLcVjRNvYPLnXnL85QT65t2cSf8sr1gGfpAxynDIS//NUc8mLbRm5c2JMYllxv2FEe15BrSnspi/TVUITx7hCkex9tpX1np3TbA6102nXxp+Li+4rBVtpkeiMVfTh8Xn86ds++tHjJcLr89qEQoVaaturknQ8Op3tDOK+4pZm23SJYxIA/GKqwUX8j7bNTX4hyMz2xMtp6+3B68LHo6/EL2ySEcUHkddHiwSwq00KcV4Y4BZJ01G796ejd44YpKoxILrq3lc6/aTDq2EyPr2ikc24cSkuXcWPSbhFpZmzWSEfv0R/lUVZKV90xlK67K+o5FPWJujy5InbjCqEkLuI/Peo2d9tm2nlGu0xyIr8nIt7iuJkYbjXS/O360uW3DaWzF4TiRron4432vfiA/rT7DuTbLr+TNspdFiKLuBbh5xxlckPyaIhwfMzt2mR6+wYBAY6ict0efKzNgHrAY6tNGmnTiEcgnUEC6zOBCRFOBkD2f2WfWgaxMpizVR57xh5zzDF5EAUEAyQCUgKDLmLCwIhoMGAef/zxOQ/iLFq0KAstW+6RbwkMmogNgzODJpYf5/nOi0Ec4WKwZZAtdcL6Yg9dRKsMsNT59NNPX23wZkN3BArhQVgR+0MPPTRdc801eU9cxA/LmDbzB7GJwz64iBxxKZNN5jnO57lz52ZhmzdvXv4TaZdffnk+Djf+fij1ZYtA2ku+CAICR1r+PBv5Eod2UCcC9S8WFqwRGMpEvMkDptxwcPNy/vnn520JqStlrm2gfK4f5VA/BJPP7BXMtcTaRFAHBgYyB+Jy40OAKW0gUHf2KKbO3CR1/7Ua2kVa4lFnAqJJ+Vic/LFxyuPmjO/UhZsKGMKfeCUsezI8Bg+20j0hnFh9t4c1uHNYXu8+YXq6MoTxhhC1E/fpj4G7kc5fFH+MIMQnik1bhOU5Z5tmWh7pF947nK22g+f0ZZHFWrsx0kU1074hYIjTltGtSbc0RGHJw8NRZlin8T57RjNtFnlj6R6zR18WCdKff1NccwQpqhpdNt2ytJUujPJnbdVIBw/Ens4hXsftjfUYylIJ0+MrokYTsZBnRx0RJcqmHg8tH07XhJjuGmJ4XJQ3PcSNc8Ua5h1xx/rmpuCxJxvp0Wjj4yGk+83uS8/Zqy/dHjcWV94Wf0whxLg7kNfltw6lX1wxGMLfl56/X3+UH7HiOO059bqhdNaNg1m0qR/ivVtY3s8Lxrtu3wyRb6WfXLoyPRQMEF5ubLgZOCHOH7RL1DfSPHX1ukv3uwSeeQITIpw0A7HCbcbm61hvDHgIUhm0+c4gx+v5z39+ZzAlDu43BBMLDkFEJBFj/pwYAYFkIOVYCZRH3lhWCBz5l4DosNk7AzObuzOQlrQM3AzEJ554YucYactAS/0QNepVApYMG8UjSJTLO4M0Azcb1XMMIaXdWEMEykQQEGqO0z7+9BnWH4M7x7G+EDxuGKgDg/+BBx6Y2491Rpp5IbSIL1wpj7SkIVAP/hoNaa+44oqONYe7mngILNxoL3/LlHbQvuIuLqKbM6v5H6KG27rUiWuIaHKjQv60j2uJqMEC7oh/uU68U0ficJwbhCKqpSp8x0JmX2IC+VIe75QFN96xcOFOnrCBezUsXZZCEIfSonvCfRpCsXFYNseFmdO/ZYh3iByixsD9WAhHI0wiBm6soF3CfTl7m760IszKLTdthJs2xCgG/l1mNEJsW2EJYr020/4x2DcbrRCxRloRgnTrfUNphxC2Nx65ceTbtt4QyXMWDqYF4erFCl0RokhdDt+1P4vmgqjbadcPZdE8cG5fWvJQK20VddonLNinh9jaMuo0GPcgnMWlOyfqRGjEgSUPNdOSEO3NN4p2RFlVaxGReigE84wbBtMVYWE+Eq7cje6MaYBlffF7aN8sBMacD3l1B9Ivi58GNwUrow5Y8feH1b5zlB/3Gx3Bw4o+ce/+tE20gbi/vGownbcw+kBw5MZkYLtmFl1c2cuDO9b/ucGHawHTTkbdFfC7BNYDAhMmnLSFgY4BkD8BxqDMYIqA8R1Lk4GOP/tVRAyxYsBD3IiPpcJfLCEeoscgjPuVgb+kWRMzBIzAQEp5z3ve87KV1T0gUxZC132ctIgXrzLAc4x6IaZYTpRBvREgApYcdSM+1igiSZ2JU8S4+508iF99kVf1e/lMXbiRwLLFioTN4YcfnvksWLAg1wM3LH8ZhjoRnw3vaT8CQ9155zjHuCYIK4IPh7qBGwo8BAga5VIveBNoO21DsLlm5I/QIWaIdpUJ7eM77eEmge+400lfrnVhwDHKRWgRYkSbOBznVa4j8UcKCN2rD5uWLrkZgRhOLzmwP20yrZGuCovqtqXD6Yhd21YkLlHmIrcLiw9LCQv1N9cO5nlN3IjMi/7gopXZgkKMEAosyl9dOZjmhaDi1sQFizsYy/bU69uu2dlbx00CYhHuUkSBOVTcnIgvNSavvlCkZ82PvwcbgoKgLQ7x3W37tguXPIlXhAyB2y6EmbiI8OW3DKWLo23MYyJsuG8fCFHfePpQujDcw4E5u5IPmdeXLTrcoi87aFrcADTTOQuGQvib6dkhdOcuHM5u1JEYlmMgvuehiBdlHBQCzzwu1vWsrZmfL7HaViQMqR9sDo64194xnG82iMUvNYzj1B8ftol51GfNbwa39nnay3GDBNZXAvVHzjW0hEGMQfKMM87IAyGDHe618p2BnWPdAxwiyWBMXAZd3JVYkbywyhiQGfQZaMug2l0NzhGX9IgErlEGdAZmrBqssxKIhwuZNN2BQRhrElEgUB4DNi5PxIA6dgfag1gRD0uLfBGWCy+8ML8jVnwvViiuV8qhXVjZuGpHqksph3SUgRAhGlhocOR7OQ4frE7aTqAu5I+gwgCLFQ4IGZYsn9cmcI2pAwFXMHWBEdw5x3duhjhGWYXfaGXBjbYjntwYYMVy88UxXuQHIxhyPYtlT7s5z3XlhoZrA2OEtTsgJliQDOSBPazMWBR2/1DM6Q2nA8NanLddI7sWLwg36dZhER0Wc5xIFRYV83cvDFfkXiF4V0f8x8Oi3HtWM10fblosPkR3cbhxb3+gbYFts1kzW1qL4hgW1BaRfo9Z/dmaxcJcFl72qHm4R9vuUuYXCfOjDrTpipgbXbBkKO0VZWwc1bg6xCa7cyMOltsTkQeu2b1n9cV7zJ+GhYY7mRsBLDna+kDcx1wTViTu3L3DjRyY4to00sxYBIT4xmVKrRBfLGZuHKLYNC9EnbRjhUCSFoerG2E7LIT40nDZ3v1QzFvOSmnTSpciT8ohT35lWfzDKg+jvB1WnS8LsFZyIxIv4pcoY9XF8xJ4pghMqHAySDJYY3ExqCNALM7hOwM7A/hFF12UB7xqgxl0EQJcbGVBCC7NU089NR8jLfkxyGK5dAcGHIQIC6xYWFh/HGeQR0RxgTLQEo8X5fF9pIAVxRwa7aHcefPm5WgIEwM5beRcCbiMEf5nPetZeSCnXOqK8DMHSJ2ZV6Rut8ScHu+IN4t5mJst5ZT8RnonDjceiCj15sUxyuIzIkVbDzvssJwcAUdsqvVH2BBMRKbciIxU1pqOkZ7VzuTBH/umTISS9nDTRHkE6kQZuLgRsyqvav4I/cDAQL5RIT/+litpmDelLPrGLcEMlzyB9sKPcyymggdl456HT+FRLQPLEMG6Lxb1MNAz58lCnuP26M+rTHEVIirHxvcdwtrccSus3nbfYGBnjvP8hUPp9hAZ5v+wHDmNu/P061s5bX+M+NHkLNDMje4Y+czbti9tHa7KuWHx3otLM4Rq6U2DsZq17RKdvz2LdmJRUgg6rtsrw9L8+RUxZxvl77FjX9opLNUj5wfPUBKE7swo74GwZJ+7b3uelJsAXMQ7sVp223Z9iXxPuHlZoDMrXLgHh7h1Qqwgxmom3BFWI9Y1bcHFzGImrOBtg8NoyoWocdPBgqrtt2xmi3dpfMcFft8j8T3aU0Jx5y6L+dPb7m+Fm3Yw7R5tgi8cnowbECz6TadTbrQt5kQRflb9coMDS4ME1lcCEyqcDMyICNYDARchVgKCw4DGIFgGtyoQRAqhwWJAaBgIic8ASp4Mmggp1gjznSVUB2MGbEQD9y6DLpYh4ohbE6EsYkMdEGgWLHF8tEDepKF84jMwE7DkyKOUTRzaRDwEhLaQL4KCWHLzwACP1YQlRZvIC3cp4oMI0VYsqZJnqRN50i5EkTJhy01AaQvvpC0Byx1LmkAZ5AkHmMIBseF6cAwxr6YteYz1TpnUs9SV76VutIdFPhyjzog3daLOawrEhx2Lr4p1DlPqizXJjQzXEkuZgFgODAzkMhBVBJsbGuLBq3pdETgW8fzf1SvDYmuFIDXTyw+ZloXqFyFSWIqsiEWAolnZwnzOXv3p8BAc0GIlYlEiLnNCZB5cnmKucii7a3cOV+edsYiGxUWzQuSw6paH6/LccH+yMhYhwjK76e5YEBeu3gPCusVaZQUsgoqrlfQIOtYfLtotw406M+ZFh4PJYFijRcDja+dxl+iC2b37ZHRf3J/XhXXZtkrb/YFFPktCGDddkvI50qKGWN0sUJozs5FX79LuWeFY2THqjlBfuCh+J9HmZu5TOVEW0eiGcU1zFumuEGWYPRj1ZWER5dwRlvDcyHOXbWO+lqIisHiIhVeI4JZxI3FIuGpZSLR1tK8v8r8zrsW1d8Y1DgcJ9dgtRPe5B8RNVNwEtOvbzsf/JbA+Epgw4WTwwxKbN29eHpD5jAXIOxYH5wlYYYhKCQzeCAJzoQyIDKAIJIMt5xigecyFgXP//ffv5EN6RAyrhld3QMAQEQSE8spgj7BSBoNrdYDtTl/9TlrqT30YzLtFDnch7aYeJU/iloCIICCIFi/qTT2Ij7AikHDCPUw6XuSD8FB/znGMNIgvofAkLYHznGPlKp9ZiIRlRkAozwj3OWmw8BDvYrkTlzxKG3OCGv+Rnhdtor7cLFEO9eealRW1a8qS+JRPPggvNyoc40W+3FAVESZ/uLFgaCDEkxsuuPA+kps2skw7xCKgl8SgzID/WFiPPDt5+9JwLYZ783cOnh7uzLAWQzR5PvOymC/EAs0huiyrVY+YPy1cuG0L86Z7WjEnx8rV9vzdc/bsj/ixIChWxFLfTUMIjt2jGStap6UrQjy2imc9Dx0IN29YdJS92UaxqCvcq5fG3OOlN8fCnpgb3DUsUyytVx0aq5RDpHHJRlZjBq48z5tioZYFQFiFrJZ9JKw4RGrHrZjiaGfV14wblGg74o8ljcsXVy3u3u22iOc2Q9wJ/REv7iOy4YmFeu8j7TlHFu7ceh+CGZEiLqIfVy27Ye8MQeVGgZXJhKN3608n7N2XtgkLljpxA0E1uJEZijxZHPSscHPvEY+6cN0RWK4V5w0SWN8JTKhwIihYV6yGRQSwRJjP41EFBlIGFkL1M8ewFljIg7WAO/fss8/OgyN5IJoMnMcee2wehEmLwOJ6RRgQAoQRFy8/QALv1AORY4Dl2T4GZtIiIoj32gTyQAARwtKWkg8WEoM6ol+EkVXGCCPv3BwgsNSZfIhbONBu2MGB+V3cvsQvx2gjlhXpeZWyeUdEeC91w7onILiICSx4xwrnZoKyqukRt3IzQTnlXGnXmt5pJ21DeEkLc8ogwAhLsE5+pCN+NQ31ZXHUwMBA9kTgfeAY32kXnLj+lF3Em8+dG4rIk4U0WHK4CHFPRhFZFHg2k0dIEEKOsahmkxC++EZVcmhEl2KVLYM/bsyD5vTHnGUzLQwr86qwqAgM+shCO9/gHaKC0CIiCBUrS1kkw7zmRnFul5jPvPrO6KOR3wsPCGs0BDynjTIW39f+TI5rDFFFxAgLGuGnnjnEMazAvlA+HoN59u5R8KrmUAaWLAt7WMzDAqKbQwhpMatrH4/6bRs3GTzSQiLyZE73kpuH03ZRV1zYdz8ylOd1EUXqTd5nLcCKHs4rbHE/E5ohvtOi6I2CDWLYLYhRzWwBUxY1IHTHaR/1fwmsfwSia09MYKBikGaQ4535SY4xeJbFG8XSZLBnoGeAJC7feecYgyID369//essvlgfPL5CWoSGQBzcgqx0xQXKPCrzixwnMGgzoOO6Y94MSwQrk7oUl191cM6JxvEf+c+bNy9bRaUu1JsBm5sFRL8M2JSF2CHaWFHcBCDkBESTutNOBI1Afogd6SkDAUIkYcMiHCwuXJncNBCXmxLEmvME6oEVyQ0EeSDYiDTtRNRggDBzjMdb2KSB68KNBZY5eSP6pV0501H+I0/i8SgIbnWuOccQMcoicB7WtGFdAnnAkevJdS2MYYWFzY0Qws+LOFj0xUIv1zhLQwgJ4hfV7ATm1BARBI1BG8uRRSrdgTQM8Dy68v0LV4ZlFo9ahdW1fQhyXm2LF7+SL59Jg/sU9/DCeASFvPl+e8z3sVAGa+/hmIe8IyzV3cLqIn6uWzWfyDYua643dcr1p6i2NuUimbLEgivn8zrc+Ep7WLyEO7VbkBBx8or7hhzoO3eHtb08RHKbsJCnx0nStOvUnhfl+6LYLGF5sJoVAspNB+3Acp0b7tWr4ybi1jjPozFwpUo5jyghPq4WhqIBeTEQZYxwfrXIfpHAekhgQoSTHx4DO4MwAxsvBGFgYCAPZjyywQCPhcDAz4CN4DGYIzAs5EF8GGwZEInDZgIIH/NaCCqvErBAeayFAZJVowgFZfCIBWVjdSE8xSpFpFigxKpN5h0ZzMcjEKU83hmEGcSvvfbaPN9arQ/nGMBpL5/hQd0pi7oRF8GiXpznO/HLTj/kj4jiikaECMTjVdLBi/YyN4oo8oIfYlzqAjfEBKsYQaNsxB7BYVEWFix8qB/pOM8jIMyzIsSUN55APPjBGG8C5ZIvLmDy4hrSF3gvNzMj5Us+pe4jnecY/YY2cePEjQLiyE0I9eZmhXZw04Sljnuafod4l3yjqXkHn0tvbc8Fsu0c85Vx2xZzc61YHbsinRYWIYFFQKxy3T6ePyQdNBA7hGD21s100mH9MecZYhYnOI9w8AgFmw0grAgqaTjHAiRcw1i4WKC4MdubLTRixWw8FjK3mR9zYVFMavTnDQLo4ghOntskn1ynFG7g4bwN38J4jnTm5lF/CqgEvlHuHeE6vSVWC1Mui3jmbVuJVPnIZUZ8EbbhWDC0LDYiuD0EnDYgfFilPLLy+IrhdPLVQ9kinzOzP8+Nwg8LnjwI5LF9LPh56UH9+ZGaaSG6x4X7mvMskuJ8NeBS3msW5fTnZ1yr5/wsgd8WAhMmnIgKgxWDJwMqFiEDNOLBwM1gjkXCYIrFxUBNYEBEABhgEVZEFeuQAbMM0CPBRGB4RITBn8GS8hjAcQ3zGSEiYElhhRCYN+V4GVTzwXH+R/0oD6sN4a3mwWesL+pfxIe2l/rzTrsQmXKeehNIS1w4cKxb0BEB0pUFNsSlnViWiCnfeZE/YkL+MEZQBgYGMgs2PyjWZ7lhIV/KwlKjbRwfb6A8rjEsyYfryQ0OwswNEH2BY5ynDiMF6lmuPekKl+645F+e76RdxOUY7cWapwzayneuM9+flleg5nGNvDgnHs/Axck857P3iD2TN+7Lq2IZ37GmlsaK0e3CXYmIsYHAnvGAPgKAO5ZNEqLpOfCGON10L27ZZtovNipgEQyCgYoxr/qaw6OekcdGUTbzpzzLuH0cJz/SY7EuDRHFPZzTxTHSTQszjvlEAgL3UFi0bPXHc5eUw2MfVUEq2oTgMb+JAB41v5n2DJdyOZczq/xHeZuFm3qvcPMyx8kGBrzj0uZmgcVOL9p/WtR7OAsn33HNUivEvdSXdxYdYXVSFsLIfG2OF585Vg3Eh+PMcETQhpJPNY6fJbC+E2jEINfdt9eqzgymDPy8MyB3D17lHOc5h2DwzvcikhRczq2pEqWskgdxyZ+05Z1zBOLy4ns5R7y1CSWvkdKS55ryLXUeKS3HSFvqXI1T0pW2Fo7EKceq8flcrSf5VtNwnnTlhXASnxsCjtUJpBupzaV83kerY51yqnHJs4RSPnXgM+0cqTyShBZ1BvMiOhzHZVkN9IzILr84zvlyrBqPzyTlPPlAroqPcxwvaTvlV/ImTsm/Wqc43CmfPPJrVX7Eq5ZD3BLIKxDketGGHJcKjBJKvvk0lVmVpkQnL9y55FMWH5VzvkugVwnEDX9jwoSzVyH+tre7CNFIAvjb3jbrLwEJSGCiCSCcE+KqneiKmd/UEVAwp461JUlAAhsGgXDGGCQgAQlIQAISGC8BhXO8pIwnAQlIQAISCAIKp91AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUgAQlIQAIKp31AAhKQgAQkUIOAwlkDllElIAEJSEACCqd9QAISkIAEJFCDgMJZA5ZRJSABCUhAAgqnfUACEpCABCRQg4DCWQOWUSUggf/f3p1F2XWVdwL/apBK82hrsmXZsiXL8iDjGYwDwYFOE6chabphxQnwkNAhkIYVkn7ipdfKYzpNOqQTSEMIDSRxYkxiEpIYD4DxPOJZsiTbsi1LsqbSrCqVen9Hump5gLCFsM6t+t1FWVLVd+/d97c39b97n33OJUCAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQIFAhIDgrsJQSIECAAAHBaQwQIECAAIEKAcFZgaWUAAECBAgITmOAAAECBAhUCAjOCiylBAgQIEBAcBoDBAgQIECgQkBwVmApJUCAAAECgtMYIECAAAECFQKCswJLKQECBAgQEJzGAAECBAgQqBAQnBVYSgkQIECAgOA0BggQIECAQIWA4KzAUkqAAAECBASnMUCAAAECBCoEBGcFllICBAgQICA4jQECBAgQ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\",\"busitype\":\"0\",\"isCreateGJ\":1,\"cardFirstDate\":null,\"preVehicleCardNo\":null,\"perdritype\":null,\"dataSource\":100,\"EntityState\":2}")
                .build();
        Request request = new Request.Builder()
                .url("http://36.133.121.106:8085/File/AddStudent")
                .method("POST", body)
                .build();
        try {
            Response response = client.newCall(request).execute();
            System.out.println(response.body().string());
            System.out.println("response.toString()::::::"+response.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    /***********************************停止学员打学时*******************************************/
    public String studentStopSync(String cardNo) {
        Stu stu = stuDao.getStuDetailByCardNo(cardNo);//getByCardNo(cardNo,student.getTrainType());
        Dept dept = deptDao.queryEntityById(Integer.parseInt(stu.getSchoolId()));
        if(dept.getName().trim().equals("威海鲁东机动车驾驶员培训有限公司")){
           return this.sendStopDl(cardNo);
        }else{
           return this.sendStopZh(cardNo);
        }
    }


    //中寰计时平台
    public String sendStopZh(String cardNo){ //ysxm
        System.out.println("中寰计时平台中寰计时平台中寰计时平台中寰计时平台中寰计时平台中寰计时平台中寰计时平台");
        Stu stu = stuDao.getStuByCardNo(cardNo);
        Student student = studentDao.getByStudentId(stu.getStudentId());

        student.setName(trimStr(student.getName()));
        stu.setName(trimStr(stu.getName()));
        //获取驾校是否有充足的学员推送数量名额
//        Long studentid = student.getId();
        Dept dept = deptDao.queryEntityById(Integer.parseInt(stu.getSchoolId()));

        if ((stu != null) && (student != null) && (StringUtils.isNotBlank(student.getPhotoPath()))) {
            StuSyncDTOwhZh stuSyncDTO = new StuSyncDTOwhZh();

            stuSyncDTO.setStudyState(2);
            stuSyncDTO.setName(stu.getName());               // 学员姓名
            stuSyncDTO.setCardNo(stu.getCardNo());          // 证件号
            stuSyncDTO.setInscode(dept.getNumber());
            if(StringUtils.isEmpty(student.getNationality())){
                stuSyncDTO.setNationality("中国");
            }else{
                stuSyncDTO.setNationality(student.getNationality());
            }
            stuSyncDTO.setVehicleType(stu.getTrainType());     // 培训车型（如：C1、C2、B1等）
            if(StringUtils.isEmpty(stu.getSignupDate())){
                stuSyncDTO.setSignUpdate(DateUtil.getNormalDateString().replace("-",""));    // 报名日期（yyyyMMdd）
            }else{
                stuSyncDTO.setSignUpdate(stu.getSignupDate().replace("-",""));    // 报名日期（yyyyMMdd）
            }
//            stuSyncDTO.setSignUpdate(stu.getSignupDate()+" 09:02:03");    // 报名日期（yyyyMMdd）
            stuSyncDTO.setPerdritype(null);                  // 原准驾车型 （如：C1、C2、B1等）
            stuSyncDTO.setPreVehicleCardNo(null);   //原驾驶证号
            stuSyncDTO.setCardFirstDate(null);
            if(StringUtils.isEmpty(stu.getMobile())){
                stuSyncDTO.setTelephone(student.getMobile());            // 手机号
            }else{
                stuSyncDTO.setTelephone(stu.getMobile());            // 手机号
            }
            if(StringUtils.isEmpty(stu.getGender())){
                stuSyncDTO.setSex(student.getGender()+"");              // 性别（1：男，2：女）
            }else{
                stuSyncDTO.setSex(stu.getGender());              // 性别（1：男，2：女）
            }
            stuSyncDTO.setCardNo(stuSyncDTO.getCardNo().toUpperCase());
            stuSyncDTO.setStunum(null);
            if(StringUtils.isEmpty(stu.getAddress())){
                stuSyncDTO.setAddress(student.getAddress());         // 联系地址
            }else{
                stuSyncDTO.setAddress(stu.getAddress());         // 联系地址
            }

            String cardType;
            String cardTypeTemp = stu.getCardType();
            if (IdentityTypeEnum.A.getCardType().equals(cardTypeTemp)) {
                cardType = "1";
            } else if (IdentityTypeEnum.C.getCardType().equals(cardTypeTemp)) {
                cardType = "3";
            } else {
                cardType = "4";
            }

            String busitype;
            String busitypeTemp = student.getLearningCategories();
            if ("初学".equals(busitypeTemp)) {
                busitype = "0";
            } else if ("增驾".equals(busitypeTemp)) {
                busitype = "1";
            } else if ("货运初领".equals(busitypeTemp)) {
                busitype = "11";
            } else if ("货运增领".equals(busitypeTemp)) {
                busitype = "12";
            }else{
                busitype = "9";
            }
            stuSyncDTO.setBusitype(busitype); // 业务类型（0：初领，1：增领）
            //1:保存同时生成国交表数据 ， 0：保存不生成国交表数据
            stuSyncDTO.setIsCreateGJ("1");//是否生成国交数据
            stuSyncDTO.setBrith(stu.getBirth());             // 出生日期 （yyyy-MM-dd）
            String base64Photo;
            //进行获取上传的图片的数据
            List<JSONObject> blist = stuDao.queryBaseImgForCardId(student.getCardNo());
            if(blist.size() > 0){
                base64Photo = blist.get(0).getString("file");
            }else{
                String photoPath = "D:/train/photo.jpg";
                if(!StringUtils.isEmpty(student.getPhotoPath())){
                    photoPath = student.getPhotoPath();
                }
                try {
                    InputStream is = new FileInputStream(new File(photoPath));
                    byte[] bytes = new byte[is.available()];
                    is.read(bytes);
                    base64Photo = Base64.getEncoder().encodeToString(bytes);
                } catch (IOException e) {
                    log.error("图片编码异常,图片路径:{},异常{}", photoPath, e.getMessage());
                    return "0";
                }
            }
            stuSyncDTO.setHeadPhoto(base64Photo);                           // 报名照片Base64编码






            stuSyncDTO.setDataSource("100");
            stuSyncDTO.setEntityState("2");
            stuSyncDTO.setStunum(null);
            // 时间戳
            Long ts = System.currentTimeMillis();
            if (log.isDebugEnabled()) {
                log.debug("ts:{}", ts);
            }

            // hash字符串
            String sign = DigestUtils.sha256Hex(ts + appSecret + cardNo);
            if (log.isDebugEnabled()) {
                log.debug("sign{}", sign);
            }
            JSONObject stuJson = (JSONObject) JSONObject.parse(JSON.toJSONString(stuSyncDTO));
            if ("初学".equals(busitypeTemp)) {
                stuJson.put("perdritype",null);
                stuJson.put("cardFirstDate",null);
                stuJson.put("preVehicleCardNo",null);
//                stuSyncDTO.setPerdritype("");                  // 原准驾车型 （如：C1、C2、B1等）
//                stuSyncDTO.setCardFirstDate("");   // 原驾驶证号
//                stuSyncDTO.setPreVehicleCardNo("");               // 驾驶证初领日期（yyyy-MM-dd）
            } else {
                if(stu.getIsPlusCard() == null){
                    stu.setIsPlusCard("0");
                }
                if(stu.getIsPlusCard().trim().equals("1")){
                    if(stu.getLaterType() == null){log.debug("ts:{}", "没有选择上级类型");}
                    if(stu.getFirstDate() == null){log.debug("ts:{}", "没有选择初领日期");}
                    stuSyncDTO.setPerdritype(stu.getLaterType());                  // 原准驾车型 （如：C1、C2、B1等）
                    stuSyncDTO.setPreVehicleCardNo(cardNo);   //原驾驶证号
                    stuSyncDTO.setCardFirstDate(stu.getFirstDate());               // 驾驶证初领日期（yyyy-MM-dd）
                }else{
                    log.debug("ts:{}", "没有选择是否增驾");
                }
            }


            System.out.println("推送中寰计时平台数据：：：：："+stuJson.toString());
            OkHttpClient client = new OkHttpClient().newBuilder().build();
            okhttp3.MediaType mediaType = okhttp3.MediaType.parse("text/plain");
            RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("strParms",stuJson.toString())
                    .build();
            Request request = new Request.Builder()
                    .url("http://36.133.121.106:8085/File/AddStudent")
                    .method("POST", body)
                    .build();
            try {
                Response response = client.newCall(request).execute();
                JSONObject json = (JSONObject) JSONObject.parse(response.body().string());
//                System.out.println(json);
                if(!StringUtils.isEmpty(json.getString("Code"))){
                    String code = json.getString("Code");
                    if(code.trim().equals("1")){
                       return "1";
                    }else{
                        return "0";
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return "0";
    }

    //https://mainrest.duolunxc.com/services/common/studentInfoSync/{}/{}
    //威海鲁东驾校
    //多轮计时平台
    public String sendStopDl(String cardNo){
        Student student = studentDao.getByCarNoStopJs(cardNo);
        Stu stu = stuDao.getByCardNoStopJS(cardNo,student.getTrainType());
        student.setName(trimStr(student.getName()));
        stu.setName(trimStr(stu.getName()));

        //获取驾校是否有充足的学员推送数量名额
        Long studentid = student.getId();
        if ((stu != null) && (student != null) && (StringUtils.isNotBlank(student.getPhotoPath()))) {
            StuSyncDTO stuSyncDTO = new StuSyncDTO();
            stuSyncDTO.setLearnStatus("2"); //还是之前的接口加了个入参，学员状态（1、报名，2、退费(退学)）learnStatus
            stuSyncDTO.setName(stu.getName());               // 学员姓名
            stuSyncDTO.setCardnum(stu.getCardNo());          // 证件号

            String cardType;
            String cardTypeTemp = stu.getCardType();
            if (IdentityTypeEnum.A.getCardType().equals(cardTypeTemp)) {
                cardType = "1";
            } else if (IdentityTypeEnum.C.getCardType().equals(cardTypeTemp)) {
                cardType = "3";
            } else {
                cardType = "4";
            }
            stuSyncDTO.setCardnum(stuSyncDTO.getCardnum().toUpperCase());
            stuSyncDTO.setCardtype(cardType);                // 证件类型（1：身份证，2：护照，3：军官证，4：其他）
            if(stu.getGender() == null || stu.getGender().trim().equals("")){
                stuSyncDTO.setSex(student.getGender()+"");              // 性别（1：男，2：女）
            }else{
                stuSyncDTO.setSex(stu.getGender());              // 性别（1：男，2：女）
            }

            stuSyncDTO.setCompanyId(stu.getSchoolName());    // 驾校全称（要和计时平台驾校名称一致）
            stuSyncDTO.setBrith(stu.getBirth());             // 出生日期 （yyyy-MM-dd）

            String busitype;
            String busitypeTemp = student.getLearningCategories();
            if ("初学".equals(busitypeTemp)) {
                busitype = "0";
            } else if ("增驾".equals(busitypeTemp)) {
                busitype = "1";
            } else if ("货运初领".equals(busitypeTemp)) {
                busitype = "11";
            } else if ("货运增领".equals(busitypeTemp)) {
                busitype = "12";
            }else{
                busitype = "9";
            }
            stuSyncDTO.setBusitype(busitype); // 业务类型（0：初领，1：增领）

            stuSyncDTO.setTraintype(stu.getTrainType());     // 培训车型（如：C1、C2、B1等）
            if(stu.getMobile() == null  || stu.getMobile().trim().equals("")){
                stuSyncDTO.setPhone(student.getMobile());            // 手机号
            }else{
                stuSyncDTO.setPhone(stu.getMobile());            // 手机号
            }
            if(stu.getAddress() == null  || stu.getAddress().trim().equals("")){
                stuSyncDTO.setAddress(student.getAddress());         // 联系地址
            }else{
                stuSyncDTO.setAddress(stu.getAddress());         // 联系地址
            }


            String base64Photo;
            //进行获取上传的图片的数据
            List<JSONObject> blist = stuDao.queryBaseImgForCardId(student.getCardNo());
            if(blist.size() > 0){
                base64Photo = blist.get(0).getString("file");
            }else{
                String photoPath = "D:/train/photo.jpg";
                if(!StringUtils.isEmpty(student.getPhotoPath())){
                    photoPath = student.getPhotoPath();
                }
                try {
                    InputStream is = new FileInputStream(new File(photoPath));
                    byte[] bytes = new byte[is.available()];
                    is.read(bytes);
                    base64Photo = Base64.getEncoder().encodeToString(bytes);
                } catch (IOException e) {
                    log.error("图片编码异常,图片路径:{},异常{}", photoPath, e.getMessage());
                    return "0";
                }
            }
            stuSyncDTO.setPhoto(base64Photo);                           // 报名照片Base64编码
            stuSyncDTO.setApplydate(stu.getSignupDate());    // 报名日期（yyyy-MM-dd）
            stuSyncDTO.setApplyType("1");                    // 报名方式（1一次性缴费 2先学后付 3-分期付款 ）

            if ("初学".equals(busitypeTemp)) {
                stuSyncDTO.setPerdritype("");                  // 原准驾车型 （如：C1、C2、B1等）
                stuSyncDTO.setDrilicnum("");   // 原驾驶证号
                stuSyncDTO.setFstdrilicdate("");               // 驾驶证初领日期（yyyy-MM-dd）
            } else {
                if(stu.getIsPlusCard() == null){
                    stu.setIsPlusCard("0");
                }
                if(stu.getIsPlusCard().trim().equals("1")){
                    if(stu.getLaterType() == null){log.debug("ts:{}", "没有选择上级类型");}
                    if(stu.getFirstDate() == null){log.debug("ts:{}", "没有选择初领日期");}
                    stuSyncDTO.setPerdritype(stu.getLaterType());                  // 原准驾车型 （如：C1、C2、B1等）
                    stuSyncDTO.setDrilicnum(cardNo);   //原驾驶证号
                    stuSyncDTO.setFstdrilicdate(stu.getFirstDate());               // 驾驶证初领日期（yyyy-MM-dd）
                }else{
                    log.debug("ts:{}", "没有选择是否增驾");
                }

            }
            stuSyncDTO.setReferrer("无");                    // 推荐人

            // 时间戳
            Long ts = System.currentTimeMillis();
            if (log.isDebugEnabled()) {
                log.debug("ts:{}", ts);
            }

            // hash字符串
            String sign = DigestUtils.sha256Hex(ts + appSecret + cardNo);
            if (log.isDebugEnabled()) {
                log.debug("sign{}", sign);
            }

            String invokeUrl2 = "https://mainrest.duolunxc.com/services/common/studentInfoSync/" + ts + "/" + sign;
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            try {
                HttpEntity httpEntity = new HttpEntity(objectMapper.writeValueAsString(stuSyncDTO), headers);
                ResponseEntity<Result> entity = restTemplate.postForEntity(invokeUrl2, httpEntity, Result.class);
                log.error(student.getName()+":"+entity.getStatusCode().is2xxSuccessful());
                if (entity.getStatusCode().is2xxSuccessful()){
                    Result result = entity.getBody();
                    if (result.getErrorcode() == 0) {
                        return "1";
                    } else {
                        return "0";
                    }
                }else {
                    return "0";
                }
            }catch (Exception e){
                //e.printStackTrace();
                log.error("调用{}异常,body:{},exception", invokeUrl2, JSON.toJSONString(stuSyncDTO), e.getMessage());
            }
        }
        return "0";
    }


    /******************************************************************************/







    /***********************************学员变更车型接口*******************************************/
    public String studentChangeTrainTypeSync(String cardNo,String trainType) {
//        Student student = studentDao.getByCarNo(cardNo);
        Stu stu = stuDao.getByCardNo(cardNo,trainType);
        Dept dept = deptDao.queryEntityById(Integer.parseInt(stu.getSchoolId()));
        if(dept.getName().trim().equals("威海鲁东机动车驾驶员培训有限公司")){
            return this.sendChangeTrainTypeDl(cardNo,trainType);
        }else{
            return this.sendChangeTrainTypeZh(cardNo,trainType);
        }
    }


    //中寰计时平台
    public String sendChangeTrainTypeZh(String cardNo,String trainType){
        System.out.println("中寰计时平台中寰计时平台中寰计时平台中寰计时平台中寰计时平台中寰计时平台中寰计时平台");
        Student student = studentDao.getByCarNoStopJs(cardNo);
        Stu stu = stuDao.getByCardNo(cardNo,trainType);
        student.setName(trimStr(student.getName()));
        stu.setName(trimStr(stu.getName()));
        //获取驾校是否有充足的学员推送数量名额
        Long studentid = student.getId();
        Dept dept = deptDao.queryEntityById(Integer.parseInt(stu.getSchoolId()));

        if ((stu != null) && (student != null) && (StringUtils.isNotBlank(student.getPhotoPath()))) {
            StuSyncDTOwhZh stuSyncDTO = new StuSyncDTOwhZh();

            stuSyncDTO.setStudyState(3);
            stuSyncDTO.setVehicleType(trainType);     // 培训车型（如：C1、C2、B1等）
            stuSyncDTO.setName(stu.getName());               // 学员姓名
            stuSyncDTO.setCardNo(stu.getCardNo());          // 证件号
            stuSyncDTO.setInscode(dept.getNumber());
            if(StringUtils.isEmpty(student.getNationality())){
                stuSyncDTO.setNationality("中国");
            }else{
                stuSyncDTO.setNationality(student.getNationality());
            }

            if(StringUtils.isEmpty(stu.getSignupDate())){
                stuSyncDTO.setSignUpdate(DateUtil.getNormalDateString().replace("-",""));    // 报名日期（yyyyMMdd）
            }else{
                stuSyncDTO.setSignUpdate(stu.getSignupDate().replace("-",""));    // 报名日期（yyyyMMdd）
            }
//            stuSyncDTO.setSignUpdate(stu.getSignupDate()+" 09:02:03");    // 报名日期（yyyyMMdd）
            stuSyncDTO.setPerdritype(null);                  // 原准驾车型 （如：C1、C2、B1等）
            stuSyncDTO.setPreVehicleCardNo(null);   //原驾驶证号
            stuSyncDTO.setCardFirstDate(null);
            if(StringUtils.isEmpty(stu.getMobile())){
                stuSyncDTO.setTelephone(student.getMobile());            // 手机号
            }else{
                stuSyncDTO.setTelephone(stu.getMobile());            // 手机号
            }
            if(StringUtils.isEmpty(stu.getGender())){
                stuSyncDTO.setSex(student.getGender()+"");              // 性别（1：男，2：女）
            }else{
                stuSyncDTO.setSex(stu.getGender());              // 性别（1：男，2：女）
            }
            stuSyncDTO.setCardNo(stuSyncDTO.getCardNo().toUpperCase());
            stuSyncDTO.setStunum(null);
            if(StringUtils.isEmpty(stu.getAddress())){
                stuSyncDTO.setAddress(student.getAddress());         // 联系地址
            }else{
                stuSyncDTO.setAddress(stu.getAddress());         // 联系地址
            }

            String cardType;
            String cardTypeTemp = stu.getCardType();
            if (IdentityTypeEnum.A.getCardType().equals(cardTypeTemp)) {
                cardType = "1";
            } else if (IdentityTypeEnum.C.getCardType().equals(cardTypeTemp)) {
                cardType = "3";
            } else {
                cardType = "4";
            }

            String busitype;
            String busitypeTemp = student.getLearningCategories();
            if ("初学".equals(busitypeTemp)) {
                busitype = "0";
            } else if ("增驾".equals(busitypeTemp)) {
                busitype = "1";
            } else if ("货运初领".equals(busitypeTemp)) {
                busitype = "11";
            } else if ("货运增领".equals(busitypeTemp)) {
                busitype = "12";
            }else{
                busitype = "9";
            }
            stuSyncDTO.setBusitype(busitype); // 业务类型（0：初领，1：增领）
            //1:保存同时生成国交表数据 ， 0：保存不生成国交表数据
            stuSyncDTO.setIsCreateGJ("1");//是否生成国交数据
            stuSyncDTO.setBrith(stu.getBirth());             // 出生日期 （yyyy-MM-dd）
            String base64Photo;
            //进行获取上传的图片的数据
            List<JSONObject> blist = stuDao.queryBaseImgForCardId(student.getCardNo());
            if(blist.size() > 0){
                base64Photo = blist.get(0).getString("file");
            }else{
                String photoPath = "D:/train/photo.jpg";
                if(!StringUtils.isEmpty(student.getPhotoPath())){
                    photoPath = student.getPhotoPath();
                }
                try {
                    InputStream is = new FileInputStream(new File(photoPath));
                    byte[] bytes = new byte[is.available()];
                    is.read(bytes);
                    base64Photo = Base64.getEncoder().encodeToString(bytes);
                } catch (IOException e) {
                    log.error("图片编码异常,图片路径:{},异常{}", photoPath, e.getMessage());
                    return "0";
                }
            }
            stuSyncDTO.setHeadPhoto(base64Photo);                           // 报名照片Base64编码






            stuSyncDTO.setDataSource("100");
            stuSyncDTO.setEntityState("2");
            stuSyncDTO.setStunum(null);
            // 时间戳
            Long ts = System.currentTimeMillis();
            if (log.isDebugEnabled()) {
                log.debug("ts:{}", ts);
            }

            // hash字符串
            String sign = DigestUtils.sha256Hex(ts + appSecret + cardNo);
            if (log.isDebugEnabled()) {
                log.debug("sign{}", sign);
            }
            JSONObject stuJson = (JSONObject) JSONObject.parse(JSON.toJSONString(stuSyncDTO));
            if ("初学".equals(busitypeTemp)) {
                stuJson.put("perdritype",null);
                stuJson.put("cardFirstDate",null);
                stuJson.put("preVehicleCardNo",null);
//                stuSyncDTO.setPerdritype("");                  // 原准驾车型 （如：C1、C2、B1等）
//                stuSyncDTO.setCardFirstDate("");   // 原驾驶证号
//                stuSyncDTO.setPreVehicleCardNo("");               // 驾驶证初领日期（yyyy-MM-dd）
            } else {
                if(stu.getIsPlusCard() == null){
                    stu.setIsPlusCard("0");
                }
                if(stu.getIsPlusCard().trim().equals("1")){
                    if(stu.getLaterType() == null){log.debug("ts:{}", "没有选择上级类型");}
                    if(stu.getFirstDate() == null){log.debug("ts:{}", "没有选择初领日期");}
                    stuSyncDTO.setPerdritype(stu.getLaterType());                  // 原准驾车型 （如：C1、C2、B1等）
                    stuSyncDTO.setPreVehicleCardNo(cardNo);   //原驾驶证号
                    stuSyncDTO.setCardFirstDate(stu.getFirstDate());               // 驾驶证初领日期（yyyy-MM-dd）
                }else{
                    log.debug("ts:{}", "没有选择是否增驾");
                }
            }


            System.out.println("推送中寰计时平台数据：：：：："+stuJson.toString());
            OkHttpClient client = new OkHttpClient().newBuilder().build();
            okhttp3.MediaType mediaType = okhttp3.MediaType.parse("text/plain");
            RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("strParms",stuJson.toString())
                    .build();
            Request request = new Request.Builder()
                    .url("http://36.133.121.106:8085/File/AddStudent")
                    .method("POST", body)
                    .build();
            try {
                Response response = client.newCall(request).execute();
                JSONObject json = (JSONObject) JSONObject.parse(response.body().string());
//                System.out.println(json);
                if(!StringUtils.isEmpty(json.getString("Code"))){
                    String code = json.getString("Code");
                    if(code.trim().equals("1")){
                        return "1";
                    }else{
                        return "0";
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return "0";
    }

    //https://mainrest.duolunxc.com/services/common/studentInfoSync/{}/{}
    //威海鲁东驾校
    //多轮计时平台
    public String sendChangeTrainTypeDl(String cardNo,String trainType){
        Student student = studentDao.getByCarNoStopJs(cardNo);
        Stu stu = stuDao.getByCardNo(cardNo,trainType);
        student.setName(trimStr(student.getName()));
        stu.setName(trimStr(stu.getName()));

        //获取驾校是否有充足的学员推送数量名额
        Long studentid = student.getId();
        if ((stu != null) && (student != null) && (StringUtils.isNotBlank(student.getPhotoPath()))) {
            StuSyncDTO stuSyncDTO = new StuSyncDTO();
            stuSyncDTO.setLearnStatus("2"); //还是之前的接口加了个入参，学员状态（1、报名，2、退费(退学)）learnStatus
            stuSyncDTO.setTraintype(trainType);     // 培训车型（如：C1、C2、B1等）
            stuSyncDTO.setName(stu.getName());               // 学员姓名
            stuSyncDTO.setCardnum(stu.getCardNo());          // 证件号

            String cardType;
            String cardTypeTemp = stu.getCardType();
            if (IdentityTypeEnum.A.getCardType().equals(cardTypeTemp)) {
                cardType = "1";
            } else if (IdentityTypeEnum.C.getCardType().equals(cardTypeTemp)) {
                cardType = "3";
            } else {
                cardType = "4";
            }
            stuSyncDTO.setCardnum(stuSyncDTO.getCardnum().toUpperCase());
            stuSyncDTO.setCardtype(cardType);                // 证件类型（1：身份证，2：护照，3：军官证，4：其他）
            if(stu.getGender() == null || stu.getGender().trim().equals("")){
                stuSyncDTO.setSex(student.getGender()+"");              // 性别（1：男，2：女）
            }else{
                stuSyncDTO.setSex(stu.getGender());              // 性别（1：男，2：女）
            }

            stuSyncDTO.setCompanyId(stu.getSchoolName());    // 驾校全称（要和计时平台驾校名称一致）
            stuSyncDTO.setBrith(stu.getBirth());             // 出生日期 （yyyy-MM-dd）

            String busitype;
            String busitypeTemp = student.getLearningCategories();
            if ("初学".equals(busitypeTemp)) {
                busitype = "0";
            } else if ("增驾".equals(busitypeTemp)) {
                busitype = "1";
            } else if ("货运初领".equals(busitypeTemp)) {
                busitype = "11";
            } else if ("货运增领".equals(busitypeTemp)) {
                busitype = "12";
            }else{
                busitype = "9";
            }
            stuSyncDTO.setBusitype(busitype); // 业务类型（0：初领，1：增领）


            if(stu.getMobile() == null  || stu.getMobile().trim().equals("")){
                stuSyncDTO.setPhone(student.getMobile());            // 手机号
            }else{
                stuSyncDTO.setPhone(stu.getMobile());            // 手机号
            }
            if(stu.getAddress() == null  || stu.getAddress().trim().equals("")){
                stuSyncDTO.setAddress(student.getAddress());         // 联系地址
            }else{
                stuSyncDTO.setAddress(stu.getAddress());         // 联系地址
            }


            String base64Photo;
            //进行获取上传的图片的数据
            List<JSONObject> blist = stuDao.queryBaseImgForCardId(student.getCardNo());
            if(blist.size() > 0){
                base64Photo = blist.get(0).getString("file");
            }else{
                String photoPath = "D:/train/photo.jpg";
                if(!StringUtils.isEmpty(student.getPhotoPath())){
                    photoPath = student.getPhotoPath();
                }
                try {
                    InputStream is = new FileInputStream(new File(photoPath));
                    byte[] bytes = new byte[is.available()];
                    is.read(bytes);
                    base64Photo = Base64.getEncoder().encodeToString(bytes);
                } catch (IOException e) {
                    log.error("图片编码异常,图片路径:{},异常{}", photoPath, e.getMessage());
                    return "0";
                }
            }
            stuSyncDTO.setPhoto(base64Photo);                           // 报名照片Base64编码
            stuSyncDTO.setApplydate(stu.getSignupDate());    // 报名日期（yyyy-MM-dd）
            stuSyncDTO.setApplyType("1");                    // 报名方式（1一次性缴费 2先学后付 3-分期付款 ）

            if ("初学".equals(busitypeTemp)) {
                stuSyncDTO.setPerdritype("");                  // 原准驾车型 （如：C1、C2、B1等）
                stuSyncDTO.setDrilicnum("");   // 原驾驶证号
                stuSyncDTO.setFstdrilicdate("");               // 驾驶证初领日期（yyyy-MM-dd）
            } else {
                if(stu.getIsPlusCard() == null){
                    stu.setIsPlusCard("0");
                }
                if(stu.getIsPlusCard().trim().equals("1")){
                    if(stu.getLaterType() == null){log.debug("ts:{}", "没有选择上级类型");}
                    if(stu.getFirstDate() == null){log.debug("ts:{}", "没有选择初领日期");}
                    stuSyncDTO.setPerdritype(stu.getLaterType());                  // 原准驾车型 （如：C1、C2、B1等）
                    stuSyncDTO.setDrilicnum(cardNo);   //原驾驶证号
                    stuSyncDTO.setFstdrilicdate(stu.getFirstDate());               // 驾驶证初领日期（yyyy-MM-dd）
                }else{
                    log.debug("ts:{}", "没有选择是否增驾");
                }

            }
            stuSyncDTO.setReferrer("无");                    // 推荐人

            // 时间戳
            Long ts = System.currentTimeMillis();
            if (log.isDebugEnabled()) {
                log.debug("ts:{}", ts);
            }

            // hash字符串
            String sign = DigestUtils.sha256Hex(ts + appSecret + cardNo);
            if (log.isDebugEnabled()) {
                log.debug("sign{}", sign);
            }

            String invokeUrl2 = "https://mainrest.duolunxc.com/services/common/studentInfoSync/" + ts + "/" + sign;
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            try {
                HttpEntity httpEntity = new HttpEntity(objectMapper.writeValueAsString(stuSyncDTO), headers);
                ResponseEntity<Result> entity = restTemplate.postForEntity(invokeUrl2, httpEntity, Result.class);
                log.error(student.getName()+":"+entity.getStatusCode().is2xxSuccessful());
                if (entity.getStatusCode().is2xxSuccessful()){
                    Result result = entity.getBody();
                    if (result.getErrorcode() == 0) {
                        return "1";
                    } else {
                        return "0";
                    }
                }else {
                    return "0";
                }
            }catch (Exception e){
                //e.printStackTrace();
                log.error("调用{}异常,body:{},exception", invokeUrl2, JSON.toJSONString(stuSyncDTO), e.getMessage());
            }
        }
        return "0";
    }


    /******************************************************************************/




}
